メインコンテンツへスキップ
JOIN演算で使用するためのオプションの事前準備済みデータ構造です。
ClickHouse Cloud では、サービスが 25.4 より前のバージョンで作成されている場合、SET compatibility=25.4 を使用して互換性を少なくとも 25.4 に設定する必要があります。

テーブルの作成

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
CREATE TABLE クエリの詳細な説明をご覧ください。

エンジンパラメータ

join_strictness

join_strictnessJOIN strictness.

join_type

join_typeJOINの種類.

キーカラム

k1[, k2, ...]JOIN 操作で使用する USING 句のキーカラムです。 join_strictnessjoin_type パラメーターは、たとえば Join(ANY, LEFT, col1) のようにクォートなしで指定します。これらは、そのテーブルを使用する JOIN 操作と一致している必要があります。パラメーターが一致していない場合、ClickHouse は例外を送出せず、不正確なデータを返すことがあります。

詳細と推奨事項

データの保存

Join テーブルのデータは常に RAM 上にあります。テーブルに行を挿入すると、サーバーの再起動時に復元できるよう、ClickHouse はデータブロックをディスク上のディレクトリに書き込みます。 サーバーが正常に再起動されなかった場合、ディスク上のデータブロックが失われたり破損したりすることがあります。その場合は、破損したデータを含むファイルを手動で削除する必要があることがあります。

データの選択と挿入

Join エンジンのテーブルにデータを追加するには、INSERT クエリを使用できます。テーブルが ANY strictness で作成されている場合、重複するキーのデータは無視されます。ALL strictness の場合は、すべての行が追加されます。 Join エンジンのテーブルの主な用途は次のとおりです。
  • JOIN 句の右側にテーブルを配置する。
  • joinGet 関数を呼び出して、Dictionary から取得するのと同じようにテーブルからデータを抽出する。

データの削除

Join エンジンのテーブルに対する ALTER DELETE クエリは、ミューテーション として実装されています。DELETE ミューテーションは、フィルタされたデータを読み取り、メモリ上およびディスク上のデータを上書きします。

制限事項と設定

テーブルの作成時には、次の設定が適用されます:

join_use_nulls

join_use_nulls

max_rows_in_join

max_rows_in_join

max_bytes_in_join

max_bytes_in_join

join_overflow_mode

join_overflow_mode

join_any_take_last_row

join_any_take_last_row

join_use_nulls

永続化

Join および Set テーブルエンジンの永続化を無効にします。 I/O のオーバーヘッドを削減します。パフォーマンスを重視し、永続化が不要なシナリオに適しています。 設定可能な値:
  • 1 — 有効。
  • 0 — 無効。
デフォルト値: 1 Join エンジンのテーブルは、GLOBAL JOIN 操作では使用できません。 Join エンジンでは、CREATE TABLE ステートメントで join_use_nulls 設定を指定できます。SELECT クエリでも、join_use_nulls の値を同じにする必要があります。

使用例

左側のテーブルを作成します:
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;
INSERT INTO id_val VALUES (1,11)(2,12)(3,13);
右側のJoinテーブルを作成します。
CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id);
INSERT INTO id_val_join VALUES (1,21)(1,22)(3,23);
テーブルの結合:
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id);
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │               0 │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘
別の方法として、joinキーの値を指定してJoinテーブルからデータを取得することもできます。
SELECT joinGet('id_val_join', 'val', toUInt32(1));
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘
Join テーブルの行を削除する:
ALTER TABLE id_val_join DELETE WHERE id = 3;
┌─id─┬─val─┐
│  1 │  21 │
└────┴─────┘
最終更新日 2026年6月10日