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

ALTER

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

修飾子
COLUMN
PARTITION
DELETE
UPDATE
ORDER BY
INDEX
CONSTRAINT
TTL
STATISTICS
APPLY DELETED MASK
注記

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

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

ステートメント説明
ALTER TABLE ... MODIFY QUERYマテリアライズドビュー 構造を変更します。
ALTER LIVE VIEWライブビュー を更新します。

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

ステートメント
USER
ROLE
QUOTA
ROW POLICY
SETTINGS PROFILE
ステートメント説明
ALTER TABLE ... MODIFY COMMENTテーブルにコメントを追加、変更、または削除します。以前に設定されていたかどうかに関係なく。
ALTER NAMED COLLECTION名前付きコレクション を変更します。

Mutations

テーブルデータを操作することを目的とした ALTER クエリは、「ミューテーション」と呼ばれるメカニズムで実装されます。特に ALTER TABLE ... DELETEALTER 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 という例外がスローされます。