ClickHouse UNDROP TABLE 関数

ClickHouse を使用する場合でも、他のデータベースを使用する場合でも、震えながらテーブルを削除した場合、それを復元するのは非常に困難です。しかし、ClickHouse はUNDROP TABLE、手の震えによってテーブルが誤って削除された場合でも、短時間で迅速に復元できる機能をサポートしています。

これはUNDROP TABLEまだ実験的な機能です。体験したい場合は、最新のv23.3.1.2823-ltsブランチを使用できます。以下で機能全体を体験してみましょう。

テストテーブルの作成

現在、Atomic ライブラリ エンジンの一部のテーブル エンジンのみがサポートされておりUNDROP TABLEMergeTreeReplicatedMergeTreeDistributedなどLogはすべてサポートされていますが、一時テーブルは をUNDROP TABLE使用した復元をサポートしていません。ここでは、エクスペリエンスのために、デフォルトのデフォルト ライブラリ エンジンの下に MergeTree テーブル エンジンを作成できます。テーブル作成ステートメントは次のとおりです。

create table test (id Int32) engine=MergeTree() order by id;

テーブルが構築されたら、リカバリ後にテーブルが正常であるかどうかのその後の検証を容易にするために、いくつかのテスト データを書き込みます。

insert into test values (1),(2),(3),(4),(5);

データが正常に書き込まれたことを確認します。

select * from test;

┌─id─┐
│  1 │
│  2 │
│  3 │
│  4 │
│  5 │
└────┘

テーブルの削除

テーブルを作成してデータを書き込んだ後、テーブルの削除操作を実行します。

drop table test;

この時点で、検証テーブルは削除されます。

select * from test;

Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table default.test doesn't exist. (UNKNOWN_TABLE)

この時点で、テーブルを再度クエリすると、テーブルが存在しないことを示すプロンプトが表示され、削除が成功したことがわかります。

新しいバージョンでは、system.dropped_tables削除されたテーブルを表示するためのシステム テーブルが提供されます。

select * from system.dropped_tables\G

Row 1:
──────
index:                 0
database:              default
table:                 test
uuid:                  87b7d1d6-f86d-485e-a254-79d9c58c7464
engine:                MergeTree
metadata_dropped_path: /data/ClickHouse/build/programs/data/metadata_dropped/default.test.87b7d1d6-f86d-485e-a254-79d9c58c7464.sql
table_dropped_time:    2023-04-02 12:30:13

このシステムテーブルは、削除されたがクリーンアップされていないデータを記録するテーブル、つまり復元可能なテーブルである。

回復フォーム

ClickHouse のデフォルト設定では、削除されたテーブルは 8 分後にタスクのクリアを開始するため、握手によって誤って削除された場合でも、UNDROP TABLEそれを復元するために使用できます。

説明書

1. アンドロップテーブル {test}

ClickHouse は同じ名前のテーブルの作成と削除を続けることができるため、この方法で最近削除されたdefault.test テーブルが見つかります。

2. アンドロップテーブル {test} UUID {uuid}

最後に削除されたテーブルを復元したくない場合は、テーブルの uuid を指定して復元できます。特定の uuid はsystem.dropped_tablesシステム テーブルでクエリできます。

3. クラスター {cluster} 上のテーブル {test} をアンドロップします

テーブルを削除するときにこのステートメントを使用するかどうかは問題ではありませんON CLUSTER。これUNDROP TABLEもサポートされていますON CLUSTER

回復テスト

は現在UNDROP TABLE実験的な機能なので、allow_experimental_undrop_table_query有効にするには:

undrop table test settings allow_experimental_undrop_table_query=1

再度クエリして確認すると、テスト テーブルが正常に復元されました。

テスト テーブルが復元された後、テスト テーブルを再度削除し、uuid を指定して復元できます。

undrop table test uuid '87b7d1d6-f86d-485e-a254-79d9c58c7464' settings allow_experimental_undrop_table_query=1

ここでの uuid はシステム テーブルでクエリされるため、実際の uuid に置き換える必要があることに注意してください。

テーブルが削除されてからデフォルトの 8 分が経過すると、テーブルを復元できず、エラー メッセージが表示されます。

undrop table test settings allow_experimental_undrop_table_query=1

Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: The drop task of table default.test is in progress, has been dropped or the database engine doesn't support it. (UNKNOWN_TABLE)

ここまででUNDROP TABLE紹介は終わりですので、興味のある方はぜひ体験してみてください。


技術的な問題について話し合うために、WeChat: xiedeyantu を追加することを歓迎します。

おすすめ

転載: blog.csdn.net/weixin_39992480/article/details/129944926