メインコンテンツまでスキップ
メインコンテンツまでスキップ

ALTER

ほとんどの ALTER TABLE クエリは、テーブルの設定またはデータを変更します:

モディファイア
COLUMN
PARTITION
DELETE
UPDATE
ORDER BY
INDEX
CONSTRAINT
TTL
STATISTICS
APPLY DELETED MASK
注記

ほとんどの ALTER TABLE クエリは、*MergeTreeMerge、およびDistributed テーブルのみに対応しています。

これらの ALTER ステートメントは、ビューを操作します:

ステートメント説明
ALTER TABLE ... MODIFY QUERYMaterialized view 構造を変更します。
ALTER LIVE VIEWLive view を更新します。

これらの ALTER ステートメントは、ロールベースのアクセス制御に関連するエンティティを変更します:

ステートメント
USER
ROLE
QUOTA
ROW POLICY
SETTINGS PROFILE
ステートメント説明
ALTER TABLE ... MODIFY COMMENTテーブルにコメントを追加、変更、または削除します。以前に設定されていたかに関わらず。
ALTER NAMED COLLECTIONNamed Collections を変更します。

Mutations

テーブルデータを操作することを目的とした ALTER クエリは、「ミューテーション」と呼ばれるメカニズムで実装されており、特に ALTER TABLE ... DELETE および ALTER TABLE ... UPDATE が含まれます。これらは、MergeTree テーブルにおけるマージに似た非同期バックグラウンドプロセスであり、新しい「ミュータント」部分のバージョンを生成します。

*MergeTree テーブルに対するミューテーションは、全データパーツの書き換えによって実行されます。 原子性はなく、パーツは準備が整い次第、ミュータントパーツに置き換えられ、ミューテーション中に実行され始めた SELECT クエリは、既にミュータント化されたパーツからのデータと、まだミュータント化されていないパーツからのデータの両方を確認します。

ミューテーションは、その作成順に全て順序付けされ、順番に各パーツに適用されます。ミューテーションは、INSERT INTO クエリとの部分的な順序も持っており、ミューテーションが提出される前にテーブルに挿入されたデータはミュータント化され、ミューテーション以降に挿入されたデータはミュータント化されません。ミューテーションは、挿入を何らかの形でブロックしないことに注意してください。

ミューテーションクエリは、ミューテーションエントリが追加されるとすぐに返されます(レプリケートテーブルの場合は ZooKeeper に、非レプリケートテーブルの場合はファイルシステムに)。ミューテーション自体は、システムプロファイル設定を使用して非同期的に実行されます。ミューテーションの進行状況を追跡するには、system.mutations テーブルを使用できます。成功裏に送信されたミューテーションは、ClickHouse サーバーが再起動されても実行を続けます。提出後にミューテーションをロールバックする方法はありませんが、何らかの理由でミューテーションが停止した場合、それは KILL MUTATION クエリでキャンセル可能です。

完了したミューテーションのエントリはすぐには削除されません(保存されるエントリの数は finished_mutations_to_keep ストレージエンジンパラメータによって決定されます)。古いミューテーションエントリは削除されます。

Synchronicity of ALTER Queries

非レプリケートテーブルの場合、すべての ALTER クエリは同期的に実行されます。レプリケートテーブルの場合、クエリは適切なアクションの指示を ZooKeeper に追加するだけであり、アクション自体はできるだけ早く実行されます。ただし、このクエリは、すべてのレプリカでこれらのアクションが完了するのを待つことができます。

ミューテーションを作成する ALTER クエリ(例えば、UPDATEDELETEMATERIALIZE INDEXMATERIALIZE PROJECTIONMATERIALIZE COLUMNAPPLY DELETED MASKCLEAR STATISTICMATERIALIZE STATISTIC を含むがこれに限られない)の場合、同期性は mutations_sync 設定によって定義されます。

メタデータのみを変更する他の ALTER クエリに対しては、alter_sync 設定を使用して待機を設定できます。

非アクティブなレプリカがすべての ALTER クエリを実行するのを待つ時間(秒単位)を、replication_wait_for_inactive_replica_timeout 設定で指定できます。

注記

すべての ALTER クエリに対して、alter_sync = 2 であり、指定された replication_wait_for_inactive_replica_timeout 設定の時間よりも長くアクティブでないレプリカが存在する場合、例外 UNFINISHED がスローされます。