> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# join_* セッション設定

> join_* 生成グループに含まれる ClickHouse のセッション設定です。

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>型</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>デフォルト値</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          再起動せずに変更可能
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

これらの設定は [system.settings](/docs/ja/reference/system-tables/settings) で参照でき、[ソースコード](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) から自動生成されています。

<div id="join_algorithm">
  ## join\_algorithm
</div>

<SettingsInfoBlock type="JoinAlgorithm" default_value="direct,parallel_hash,hash" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.12"},{"label": "direct,parallel_hash,hash"},{"label": "'default' は、join アルゴリズムを明示的に指定する方式が導入されたため非推奨になりました。また、現在は hash より parallel_hash が優先されます"}]}]} />

使用する [JOIN](/docs/ja/reference/statements/select/join) アルゴリズムを指定します。

複数のアルゴリズムを指定できます。特定のクエリでは、kind/strictness とテーブルエンジンに基づいて、利用可能なアルゴリズムが選択されます。

設定可能な値:

* grace\_hash

[Grace hash join](https://en.wikipedia.org/wiki/Hash_join#Grace_hash_join) を使用します。Grace hash は、メモリ使用量を抑えつつ、複雑な結合を高い性能で実行できるアルゴリズムです。

grace join の最初のフェーズでは、右テーブルを読み取り、キーカラムの hash 値に応じて N 個の buckets に分割します (初期値の N は `grace_hash_join_initial_buckets` です) 。これは、各 bucket を独立して処理できるようにするためです。最初の bucket の行はインメモリの hash table に追加され、それ以外はディスクに保存されます。hash table がメモリ制限 (たとえば [`max_bytes_in_join`](/docs/ja/reference/settings/session-settings/max-bytes#max_bytes_in_join) で設定) を超えるまで大きくなった場合は、bucket 数が増やされ、各行の割り当て先 bucket が変更されます。現在の bucket に属さない行はフラッシュされ、再割り当てされます。

`INNER/LEFT/RIGHT/FULL ALL/ANY JOIN` をサポートします。

* hash

[ハッシュ結合アルゴリズム](https://en.wikipedia.org/wiki/Hash_join) を使用します。kind と strictness のすべての組み合わせに加え、`JOIN ON` 句で `OR` によって結合された複数の結合キーをサポートする、最も汎用的な実装です。

`hash` アルゴリズムを使用する場合、`JOIN` の右側は RAM に読み込まれます。

* parallel\_hash

`hash` join の一種で、データを buckets に分割し、1 つではなく複数の hashtables を並行して構築することで、この処理を高速化します。

`parallel_hash` アルゴリズムを使用する場合、`JOIN` の右側は RAM に読み込まれます。

* partial\_merge

[sort-merge algorithm](https://en.wikipedia.org/wiki/Sort-merge_join) の一種で、右テーブルのみを完全にソートします。

`RIGHT JOIN` と `FULL JOIN` は `ALL` strictness の場合にのみサポートされます (`SEMI`、`ANTI`、`ANY`、`ASOF` はサポートされません) 。

`partial_merge` アルゴリズムを使用する場合、ClickHouse はデータをソートしてディスクに書き出します。ClickHouse の `partial_merge` アルゴリズムは、従来の実装とはやや異なります。まず、ClickHouse は右テーブルを結合キーで blocks 単位にソートし、ソート済み blocks に対して min-max 索引を作成します。次に、左テーブルの各 part を `join key` でソートし、それらを右テーブルと結合します。不要な右テーブル blocks をスキップするためにも min-max 索引が使用されます。

* direct

`direct` (nested loop とも呼ばれます) アルゴリズムは、左テーブルの行をキーとして右テーブルをルックアップします。
[Dictionary](/docs/ja/reference/engines/table-engines/special/dictionary)、[EmbeddedRocksDB](/docs/ja/reference/engines/table-engines/integrations/embedded-rocksdb)、[MergeTree](/docs/ja/reference/engines/table-engines/mergetree-family/mergetree) テーブルなどの特別なストレージでサポートされています。

MergeTree テーブルでは、このアルゴリズムは結合キーフィルタをストレージ層に直接プッシュダウンします。キーでテーブルの primary key index を使ってルックアップできる場合は、より効率的になることがあります。そうでない場合は、左テーブルの各 block ごとに右テーブル全体をフルスキャンします。

`INNER` と `LEFT` joins のみをサポートし、他の条件を含まない単一カラムの等価結合キーにのみ対応します。

* auto

`auto` に設定すると、まず `hash` join を試し、メモリ制限を超えた場合は実行中に別のアルゴリズムへ切り替えます。

* full\_sorting\_merge

結合前に結合対象テーブルを完全にソートする [Sort-merge algorithm](https://en.wikipedia.org/wiki/Sort-merge_join) です。

* prefer\_partial\_merge

ClickHouse は、可能であれば常に `partial_merge` join を使用し、そうでない場合は `hash` を使用します。*非推奨*であり、`partial_merge,hash` と同じです。

* default (deprecated)

従来の値のため、今後は使用しないでください。
`direct,hash` と同じです。つまり、direct join と hash join をこの順で使用しようとします。

<div id="join_any_take_last_row">
  ## join\_any\_take\_last\_row
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

右テーブルで、あるキーに一致する行が複数ある場合の、`ANY` strictness を持つ JOIN演算の動作を変更します。

<Note>
  この設定は、[`Join`](/docs/ja/reference/engines/table-engines/special/join) エンジンのテーブルと、ハッシュベースの JOIN アルゴリズムに適用されます。

  JOIN が並列に構築される場合、行の順序は非決定論的になることがあります。つまり、`join_any_take_last_row = 1` を設定すると、`ANY JOIN` クエリで非決定論的な行が返される可能性があります。
</Note>

設定可能な値:

* 0 — 右テーブルに一致する行が複数ある場合、最初に見つかった 1 行だけが結合されます。
* 1 — 右テーブルに一致する行が複数ある場合、最後に見つかった 1 行だけが結合されます。

関連項目:

* [JOIN 句](/docs/ja/reference/statements/select/join)
* [Join テーブルエンジン](/docs/ja/reference/engines/table-engines/special/join)
* [join\_default\_strictness](/docs/ja/reference/settings/session-settings/join#join_default_strictness)

<div id="join_default_strictness">
  ## join\_default\_strictness
</div>

<SettingsInfoBlock type="JoinStrictness" default_value="ALL" />

[JOIN clauses](/docs/ja/reference/statements/select/join) のデフォルトの strictness を設定します。

設定可能な値:

* `ALL` — 右テーブルに一致する行が複数ある場合、ClickHouse は一致した行の[デカルト積](https://en.wikipedia.org/wiki/Cartesian_product)を作成します。これは Standard SQL における通常の `JOIN` の動作です。
* `ANY` — 右テーブルに一致する行が複数ある場合、最初に見つかった 1 行だけを結合します。右テーブルに一致する行が 1 行しかない場合、`ANY` と `ALL` の結果は同じです。
* `ASOF` — あいまいな一致条件で数列を結合する場合に使用します。
* `Empty string` — クエリで `ALL` または `ANY` が指定されていない場合、ClickHouse では例外がスローされます。

<div id="join_on_disk_max_files_to_merge">
  ## join\_on\_disk\_max\_files\_to\_merge
</div>

<SettingsInfoBlock type="UInt64" default_value="64" />

MergeJoin がディスク上で実行される場合に、並列ソートで使用できるファイル数を制限します。

この設定値を大きくするほど、使用するRAMは増え、必要なディスクI/Oは少なくなります。

設定可能な値:

* 2以上の任意の正の整数。

<div id="join_output_by_rowlist_perkey_rows_threshold">
  ## join\_output\_by\_rowlist\_perkey\_rows\_threshold
</div>

<SettingsInfoBlock type="UInt64" default_value="5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.9"},{"label": "5"},{"label": "ハッシュ結合で行リストで出力するかどうかを判断するための、右テーブルにおけるキーごとの平均行数の下限。"}]}]} />

ハッシュ結合で行リストで出力するかどうかを判断するための、右テーブルにおけるキーごとの平均行数の下限。

<div id="join_overflow_mode">
  ## join\_overflow\_mode
</div>

<SettingsInfoBlock type="OverflowMode" default_value="throw" />

join が次のいずれかの制限に達したときに、ClickHouse がどのような動作を行うかを定義します。

* [max\_bytes\_in\_join](/docs/ja/reference/settings/session-settings/max-bytes#max_bytes_in_join)
* [max\_rows\_in\_join](/docs/ja/reference/settings/session-settings/max-rows#max_rows_in_join)

この設定が適用されるのは、[`join_algorithm`](/docs/ja/reference/settings/session-settings/join#join_algorithm) の値が
`hash` または `parallel_hash` の場合のみです。その他の
アルゴリズム (たとえば `partial_merge`、`grace_hash`、`auto`) では、これらの
制限は異なる方法で処理されます。たとえば、ディスクへのスピル、再パーティション化、または
戦略の切り替えです。詳しくは
[`join_algorithm`](/docs/ja/reference/settings/session-settings/join#join_algorithm) を参照してください。

設定可能な値:

* `THROW` — ClickHouse は例外をスローしてクエリを停止します。
* `BREAK` — ClickHouse はクエリを停止し、例外はスローしません。

デフォルト値: `THROW`。

**関連項目**

* [JOIN 句](/docs/ja/reference/statements/select/join)
* [Join テーブルエンジン](/docs/ja/reference/engines/table-engines/special/join)

<div id="join_use_nulls">
  ## join\_use\_nulls
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

[JOIN](/docs/ja/reference/statements/select/join) の動作を設定します。テーブルを結合する際、空のセルが生じることがあります。ClickHouse はこの設定に応じて、それらを異なる方法で補完します。

設定可能な値:

* 0 — 空のセルは、対応するフィールド型のデフォルト値で補完されます。
* 1 — `JOIN` は Standard SQL と同じように動作します。対応するフィールドの型は [Nullable](/docs/ja/reference/data-types/nullable) に変換され、空のセルは [NULL](/docs/ja/reference/syntax) で補完されます。
