これらの設定は system.settings で利用でき、ソースコード から自動生成されています。
insert_allow_materialized_columns
この設定を有効にすると、INSERT でマテリアライズドカラムを使用できます。
insert_deduplicate
INSERT の block の重複排除 (Replicated* テーブル向け) を有効または無効にします。
この設定は、deduplicate_insert が backward_compatible_choice に設定されている場合にのみ有効です。
設定可能な値:
- 0 — 無効。
- 1 — 有効。
デフォルトでは、INSERT ステートメントによってレプリケートテーブルに挿入された block は重複排除されます (Data Replication を参照) 。
レプリケートテーブルでは、デフォルトで各パーティションにつき直近 100 個の block のみが重複排除されます (replicated_deduplication_window、replicated_deduplication_window_seconds を参照) 。
非レプリケートテーブルについては、non_replicated_deduplication_window を参照してください。
insert_deduplication_token
この設定を使用すると、MergeTree/ReplicatedMergeTree で独自の重複排除セマンティクスを指定できます。 たとえば、各 INSERT ステートメントでこの設定に一意の値を指定することで、 同じ挿入データが重複排除されるのを防げます。
設定可能な値:
- 任意の文字列
insert_deduplication_token は、空でない場合にのみ重複排除に使用されます。
レプリケートテーブルでは、デフォルトで各パーティションごとに直近 100 件の insert のみが重複排除されます (replicated_deduplication_window、replicated_deduplication_window_seconds を参照) 。 非レプリケートテーブルについては、non_replicated_deduplication_window を参照してください。
例:
CREATE TABLE test_table
( A Int64 )
ENGINE = MergeTree
ORDER BY A
SETTINGS non_replicated_deduplication_window = 100;
INSERT INTO test_table SETTINGS insert_deduplication_token = 'test' VALUES (1);
-- the next insert won't be deduplicated because insert_deduplication_token is different
INSERT INTO test_table SETTINGS insert_deduplication_token = 'test1' VALUES (1);
-- the next insert will be deduplicated because insert_deduplication_token
-- is the same as one of the previous
INSERT INTO test_table SETTINGS insert_deduplication_token = 'test' VALUES (2);
SELECT * FROM test_table
┌insert_null_as_default
Nullable ではないデータ型のカラムに対して、NULL の代わりに デフォルト値 を挿入するかどうかを切り替えます。
カラム型が Nullable ではなく、この設定が無効な場合、NULL を挿入すると例外が発生します。カラム型が Nullable の場合は、この設定に関係なく、NULL 値はそのまま挿入されます。
この設定は INSERT … SELECT クエリに適用されます。SELECT サブクエリは UNION ALL 句で連結できる点に注意してください。
設定可能な値:
- 0 — Nullable ではないカラムに
NULLを挿入すると例外が発生します。 - 1 —
NULLの代わりにカラムのデフォルト値が挿入されます。
insert_shard_id
0 でない場合、データを同期的に挿入する Distributed テーブルの分片を指定します。
insert_shard_id の値が正しくない場合、サーバーは例外をスローします。
requested_cluster の分片数を取得するには、サーバーの設定を確認するか、このクエリを使用します。
SELECT uniq(shard_num) FROM system.clusters WHERE cluster = 'requested_cluster';設定可能な値:
- 0 — 無効。
- 対応する Distributed テーブルの
1からshards_numまでの任意の数値。
例
クエリ:
CREATE TABLE x AS system.numbers ENGINE = MergeTree ORDER BY number;
CREATE TABLE x_dist AS x ENGINE = Distributed('test_cluster_two_shards_localhost', currentDatabase(), x);
INSERT INTO x_dist SELECT * FROM numbers(5) SETTINGS insert_shard_id = 1;
SELECT * FROM x_dist ORDER BY number ASC;結果:
┌─number─┐
│ 0 │
│ 0 │
│ 1 │
│ 1 │
│ 2 │
│ 2 │
│ 3 │
│ 3 │
│ 4 │
│ 4 │
└────────┘