セルフマネージド ClickHouse と ClickHouse Cloud 間の移行

このガイドでは、セルフマネージドな ClickHouse サーバーから ClickHouse Cloud への移行方法と、ClickHouse Cloud のサービス間での移行方法を説明します。remoteSecure 関数は、SELECT および INSERT クエリでリモートの ClickHouse サーバーにアクセスするために使用します。これにより、SELECT を埋め込んだ INSERT INTO クエリを書くことで、テーブルを簡単に移行できます。
自前運用の ClickHouse から ClickHouse Cloud への移行

ソーステーブルがシャーディングされている場合やレプリケートされている場合でも、ClickHouse Cloud では宛先テーブルを 1 つ作成するだけで構いません(このテーブルでは Engine パラメータを省略できます。自動的に ReplicatedMergeTree テーブルになります)。
ClickHouse Cloud が垂直・水平スケーリングを自動的に処理するため、テーブルをどのようにレプリケートしたりシャーディングしたりするかを意識する必要はありません。
この例では、自前運用の ClickHouse サーバーが ソース、ClickHouse Cloud サービスが 宛先 になります。
概要
手順は次のとおりです。
- ソース側のサービスに読み取り専用ユーザーを追加する
- 宛先側のサービスに、ソーステーブルと同じ構造のテーブルを作成する
- ソースのネットワーク到達性に応じて、ソースから宛先へデータをプルするか、ソースからデータをプッシュする
- (該当する場合)宛先側の IP アクセスリストからソースサーバーを削除する
- ソース側のサービスから読み取り専用ユーザーを削除する
あるシステムから別のシステムへのテーブルの移行
この例では、1 つのテーブルを自前運用の ClickHouse サーバーから ClickHouse Cloud に移行します。
ソース側の ClickHouse システム(現在データを保持しているシステム)での作業
- ソーステーブル(この例では
db.table)を読み取ることができる読み取り専用ユーザーを追加します
- テーブル定義をコピー
宛先側の ClickHouse Cloud システム上で:
- 宛先データベースを作成します。
- ソースの CREATE TABLE ステートメントを使用して、移行先のテーブルを作成します。
CREATE ステートメントを実行する際は、ENGINE をパラメータなしの ReplicatedMergeTree に変更してください。ClickHouse Cloud は常にテーブルをレプリケートし、正しいパラメータを自動で設定します。ただし、ORDER BY、PRIMARY KEY、PARTITION BY、SAMPLE BY、TTL、SETTINGS 句はそのまま保持してください。
- セルフマネージドのソースからデータを取得するために、
remoteSecure関数を使用します

ソースシステムが外部ネットワークからアクセスできない場合、remoteSecure 関数は SELECT と INSERT の両方で動作するため、データをプルするのではなくプッシュすることができます。次のオプションを参照してください。
remoteSecure関数を使用して、データを ClickHouse Cloud サービスにプッシュします

remoteSecure 関数が ClickHouse Cloud サービスに接続できるようにするには、リモートシステムの IP アドレスを IP Access List で許可する必要があります。詳細については、この tip の下にある Manage your IP Access List を展開してください。
IP アクセスリストを管理する
ClickHouse Cloud のサービス一覧から対象のサービスを選択し、Settings に切り替えます。IP アクセスリストに、ClickHouse Cloud サービスへ接続する必要があるリモートシステムの IP アドレスまたはアドレス範囲が含まれていない場合は、Add IPs を使用して解決できます。

ClickHouse Cloud サービスに接続する必要がある個々の IP アドレス、またはアドレス範囲を追加します。必要に応じてフォームを編集し、Save をクリックします。

ClickHouse Cloud サービス間での移行

ClickHouse Cloud サービス間でデータを移行する主なユースケースとしては、次のようなものがあります:
- 復元したバックアップからのデータ移行
- 開発サービスからステージングサービスへのデータコピー(またはステージングから本番環境へのコピー)
この例では 2 つの ClickHouse Cloud サービスがあり、それぞれを ソース と デスティネーション と呼びます。データはソースからデスティネーションへプルされます。必要であればプッシュすることもできますが、ここでは読み取り専用ユーザーを利用できるため、プルの方法を示します。

移行には次のステップがあります:
- 一方の ClickHouse Cloud サービスを ソース、もう一方を デスティネーション として選定する
- ソースサービスに読み取り専用ユーザーを追加する
- デスティネーションサービス上に、ソースと同じテーブル構造を複製する
- 一時的にソースサービスへの IP アクセスを許可する
- ソースからデスティネーションへデータをコピーする
- デスティネーション上で IP Access List を再設定する
- ソースサービスから読み取り専用ユーザーを削除する
ソースサービスに読み取り専用ユーザーを追加する
-
ソーステーブル(この例では
db.table)を読み取れる読み取り専用ユーザーを追加します -
テーブル定義をコピーします
デスティネーションサービス上でテーブル構造を複製する
デスティネーションにまだデータベースが存在しない場合は、先に作成します:
-
デスティネーションのデータベースを作成します:
-
ソースの CREATE TABLE 文を使用して、デスティネーション側にテーブルを作成します。
デスティネーションで、ソースの
select create_table_query...の出力を使ってテーブルを作成します:
ソースサービスへのリモートアクセスを許可する
ソースからデスティネーションへデータをプルするには、ソースサービスが接続を許可している必要があります。ソースサービス上で一時的に「IP Access List」機能を無効化します。
今後もソースの ClickHouse Cloud サービスを使い続ける場合は、「どこからでもアクセス可能」に切り替える前に、既存の IP Access List を JSON ファイルにエクスポートしておいてください。これにより、データ移行後にそのアクセスリストを再インポートできます。
許可リストを編集し、一時的に Anywhere からのアクセスを許可します。詳細については IP Access List ドキュメントを参照してください。
ソースからデスティネーションへデータをコピーする
-
remoteSecure関数を使用して、ソースの ClickHouse Cloud サービスからデータをプルします。 デスティネーションに接続し、デスティネーション側の ClickHouse Cloud サービスで次のコマンドを実行します: -
デスティネーションサービス上のデータを確認します
ソース上で IP Access List を再設定する
以前にアクセスリストをエクスポートしている場合は、Share を使って再インポートできます。エクスポートしていない場合は、アクセスリストにエントリを再度追加してください。
読み取り専用ユーザー exporter を削除する
- サービスの IP アクセスリストを切り替えてアクセスを制限する