materialized_views_ignore_errors
SELECT または内部テーブル sink 内) に発生した例外は警告として記録され、INSERT ステートメントは成功します。無効な場合 (既定値) 、このような例外は伝播し、INSERT ステートメントは失敗します。
この設定が制御するのはエラー報告のみです。source table への書き込みはロールバックされず、依存 view の pipeline でエラーが発生した時点で、元の block がすでに source table に commit 済みかどうかも保証されません。無効な場合 (既定値) 、view のエラーにより INSERT は失敗します。この場合は、source table とすべての dependent views に対して exactly-once 配信を実現するため、挿入の重複排除 (insert_deduplicate, deduplicate_blocks_in_dependent_materialized_views) を使用して再試行してください。有効な場合、失敗した view とその下流の chains には部分的にしか配信されていなくても、INSERT は成功として報告されます。これは、view 側の問題によって source table への書き込みをブロックしてはならない場合にのみ使用してください (たとえば system.*_log tables) 。完全な意味については、CREATE VIEW のドキュメントを参照してください。
materialized_views_populate_atomically
CREATE MATERIALIZED VIEW ... POPULATE をアトミックにします。source table の新規 insert をビューがサブスクライブすることと、既存データのスナップショット取得を、source table に対する短時間の排他ロック下で同時に行います。これにより、population と同時に挿入されたすべての行は、欠落も重複もなく、exactly-once でビューに配信されます。その後の (長時間実行される可能性がある) population は、ロックを保持せずに固定されたスナップショットを読み取ります。
これはローカルの insert パスにおけるアトミック性です。排他ロックは、同じ server 上でこの source table の storage lock を取得する insert とのみ直列化されるため、exactly-once の保証はこの server 経由で到着する insert に限られます。これはクラスター全体の保証ではありません。ReplicatedMergeTree ソースの別のレプリカ上で、または分散書き込みパス (たとえば Distributed table への書き込みや ON CLUSTER 経由) を通じて population と同時に挿入された行は、依然として欠落または重複する可能性があります。
この機能には、source table が固定された特定時点のスナップショットの読み取りをサポートしている必要があります (MergeTree ファミリーおよび Memory) 。その他のソース (view、Distributed、Merge、Log ファミリー、または Atomic database に属さない table) では、population は従来の非アトミックな動作にフォールバックします (server log に記録されます) 。既存データは個別の連携されていないスナップショットで読み取られるため、population 中に挿入された行は欠落または重複する可能性があります。すべてのソースで従来の動作を強制するには、この設定を false にします。通常の CREATE MATERIALIZED VIEW にのみ適用されます。CREATE OR REPLACE / REPLACE は常に従来の非アトミックな population を使用します。また、Replicated database で作成された view (POPULATE には database_replicated_allow_heavy_create が必要) も同様です。これは、population が失敗した場合、そこでのすべてのレプリカで一貫してロールバックできないためです。
materialized_views_squash_parallel_inserts
parallel_view_processing が有効な場合、INSERT クエリは max_insert_thread ごとに宛先テーブルにパーツを生成します。