メインコンテンツへスキップ
メインコンテンツへスキップ

更新ミューテーション

更新ミューテーションとは、更新操作によってテーブルデータを操作する ALTER クエリを指します。代表的なものとしては ALTER TABLE ... UPDATE などのクエリがあります。このようなクエリを実行すると、データパーツの新しいミューテーション済みバージョンが生成されます。これは、そのミューテーションより前に挿入されたすべてのデータについて、パーツ全体の書き換えが発生することを意味し、大量の書き込み要求につながります。

参考文献

更新を行う場合、デフォルトの MergeTree テーブルエンジンの代わりに、ReplacingMergeTreeCollapsingMergeTree などの専用テーブルエンジンを使用することで、このような大量の書き込み要求を回避できます。

ALTER TABLE ... UPDATE ステートメント

ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr

指定されたフィルタ式に一致するデータを操作します。mutationとして実装されています。

:::note
ALTER TABLE プレフィックスにより、この構文は SQL をサポートする他の多くのシステムとは異なります。これは、OLTP データベースにおける類似のクエリとは異なり、この操作が頻繁な使用を想定していない重い処理であることを示すためのものです。 :::

filter_expr は型 UInt8 でなければなりません。このクエリは、filter_expr が 0 以外の値を取る行に対して、指定された列の値を対応する式の値に更新します。値は CAST 演算子を使用して列の型にキャストされます。プライマリキーまたはパーティションキーの計算に使用される列の更新はサポートされません。

1 つのクエリには、カンマで区切られた複数のコマンドを含めることができます。

クエリ処理の同期動作は、mutations_sync 設定によって定義されます。デフォルトでは非同期です。

関連項目