ClickHouse/docs/ja/engines/table-engines/special/join.md
2020-07-16 11:56:45 +03:00

5.2 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 40 参加

参加

で使用するための準備されたデータ構造 JOIN 作戦だ

テーブルの作成

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_strictnessjoin_type 引用符のないパラメータ, Join(ANY, LEFT, col1). も一致しなければならない JOIN テーブルが使用される操作。 パラメーターが一致しない場合、ClickHouseは例外をスローせず、誤ったデータを返す可能性があります。

テーブルの使用法

左側のテーブルの作成:

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) SETTINGS join_use_nulls = 1
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │            ᴺᵁᴸᴸ │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘

別の方法として、 Join 結合キー値を指定するテーブル:

SELECT joinGet('id_val_join', 'val', toUInt32(1))
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘

データの選択と挿入

以下を使用できます INSERT にデータを追加するクエリ Join-エンジンテーブル。 テーブルが作成された場合 ANY 厳密さ、重複キーのデータは無視されます。 と ALL 厳密さは、すべての行が追加されます。

を実行できません。 SELECT テーブルから直接クエリ。 代わりに、次のいずれかの方法を使用します:

  • Aの右側にテーブルを置いて下さい JOIN 句。
  • コール joinGet 辞書と同じ方法でテーブルからデータを抽出できる関数。

制限事項と設定

テーブルを作成するときは、次の設定が適用されます:

その Join-エンジンテーブルは使用できません GLOBAL JOIN 作戦だ

その Join-エンジンは使用を許可する join_use_nulls の設定 CREATE TABLE 声明。 と SELECT クエリを使用できる join_use_nulls あまりにも。 あなたが違う場合 join_use_nulls 設定することができるエラー入社。 それは結合の種類に依存します。 使用するとき joinGet 関数、あなたは同じを使用する必要があります join_use_nulls 設定 CRATE TABLESELECT 声明。

データ保存

Join テーブルデータは常にRAMにあります。 を挿入する際、列表ClickHouseに書き込みデータブロックのディレクトリのディスクできるように復元され、サーバが再起動してしまいます。

場合はサーバが再起動誤り、データブロックのディスクがいます。 この場合、破損したデータを含むファイルを手動で削除する必要がある場合があります。

元の記事