CANCEL ALTER TABLE
CANCEL ALTER TABLE は、実行中の ALTER TABLE 操作の実行をキャンセルします。対象となる操作は以下のとおりです。
- 列の変更。
- バケッティング手法やバケット数の変更など、テーブルスキーマの最適化 (v3.2 以降)。
- ロールアップインデックスの作成と削除。
- このステートメントは同期操作です。
- このステートメントを実行するには、テーブルに対する
ALTER_PRIV権限が必要です。 - このステートメントは、ALTER TABLE を使用した非同期操作のキャンセル (上記参照) のみをサポートし、名前の変更など、ALTER TABLE を使用した同期操作のキャンセルはサポートしません。
構文
CANCEL ALTER TABLE { COLUMN | OPTIMIZE | ROLLUP } FROM [db_name.]table_name [ (rollup_job_id [, rollup_job_id]) ] [ FORCE ]
パラメータ
-
{COLUMN | OPTIMIZE | ROLLUP}COLUMNが指定された場合、このステートメントは列の変更操作をキャンセルします。OPTIMIZEが指定された場合、このステートメントはテーブルスキーマの最適化操作をキャンセルします。ROLLUPが指定された場合、このステートメントはrollup index の追加または削除操作をキャンセルします。特定のロールアップジョブをキャンセルするには、rollup_job_idをさらに指定できます。
-
db_name: オプション。テーブルが属するデータベースの名前。このパラメータが指定されていない場合、現在のデータベースがデフォルトで使用されます。 -
table_name: 必須。テーブル名。 -
rollup_job_id: オプション。ロールアップジョブの ID。ロールアップジョブの ID はSHOW ALTER MATERIALIZED VIEW を使用して取得できます。 -
FORCE: オプション。運用担当者専用の緊急手段で、共有データ (lake) テーブル上でpublish_versionがFINISHED_REWRITING状態のまま恒久的にスタックしたCOLUMNalter ジョブ (例:txnlogの欠落、segment / SST ファイルの消失、永続ストレージ障害など) を強制的にキャンセルします。通常のCANCEL ALTER TABLEはFINISHED_REWRITINGのジョブのキャンセルを拒否しますが、FORCEはそのガードをバイパスします。内部的には no-op publish (alter の変更を適用せずにパーティションの可視バージョンだけを進める) を実行してからジョブをキャンセルし、そのテーブルへの後続のロードのブロックを解除します。警告FORCEは FE 設定enable_admin_skip_committed_txn(デフォルトfalse) によって制御されます。リカバリ中のみ有効化し、終了後は直ちに無効化してください。この共有設定とトランザクションレベルの同種の緊急手段については ADMIN SKIP COMMITTED TRANSACTION を参照してください。FORCEは共有データ (lake) テーブル上のCOLUMNalter ジョブ (スキーマ変更およびenable_persistent_index/file_bundlingなどのメタデータ alter) のみ をサポートします。OPTIMIZE、ROLLUP、マテリアライズドビューの alter には対応しておらず、これらにFORCEを使用すると拒否されます。- 強制キャンセルされた alter は破棄され、変更は反映されません。
Examples
- データベース
example_db内のexample_tableに対するカラム変更のオペレーションをキャンセルします。
CANCEL ALTER TABLE COLUMN FROM example_db.example_table;
- データベース
example_db内のexample_tableに対するテーブルスキーマの最適化操作をキャンセルします。
CANCEL ALTER TABLE OPTIMIZE FROM example_db.example_table;
- 現在のデータベースで、
example_tableのロールアップインデックスの追加または削除の操作をキャンセルします。
CANCEL ALTER TABLE ROLLUP FROM example_table;
-
現在のデータベースにある
example_tableの特定のロールアップ変更を、ジョブ ID を使ってキャンセルします。CANCEL ALTER TABLE ROLLUP FROM example_table (12345, 12346); -
共有データ (lake) テーブル上で publish がスタックした
COLUMNalter を強制的にキャンセルします (運用担当者専用、enable_admin_skip_committed_txn=trueが必要)。-- リカバリ中のみ緊急スイッチを有効化します。ADMIN SET FRONTEND CONFIG ("enable_admin_skip_committed_txn" = "true");CANCEL ALTER TABLE COLUMN FROM example_db.example_table FORCE;-- 終了後は直ちに無効化します。ADMIN SET FRONTEND CONFIG ("enable_admin_skip_committed_txn" = "false");