remoteSecure を使用したセルフマネージド ClickHouse と ClickHouse Cloud 間の移行

このガイドでは、セルフマネージドの ClickHouse サーバーから ClickHouse Cloud へ移行する方法と、ClickHouse Cloud サービス間で移行する方法を説明します。
remoteSecure 関数は、リモートの ClickHouse サーバーへのアクセスを可能にするために、SELECT および INSERT クエリ内で使用される関数です。これにより、SELECT を埋め込んだ INSERT INTO クエリを記述するのと同じ要領でテーブルを移行できます。
セルフマネージド ClickHouse から ClickHouse Cloud への移行

元のテーブルが分片されているか、レプリカ構成か、あるいはその両方かに関わらず、ClickHouse Cloud では宛先テーブルを作成するだけで十分です(このテーブルについては Engine パラメータを省略できます。テーブルエンジンとしては SharedMergeTree が自動的に選択されます)。
ClickHouse Cloud が垂直方向および水平方向のスケーリングを自動的に処理します。
テーブルをどのようにレプリケートおよび分片するかを考える必要はありません。
この例では、セルフマネージドの ClickHouse サーバーが ソース であり、ClickHouse Cloud サービスが 宛先 です。
概要
手順は以下のとおりです。
- ソースサービスに読み取り専用ユーザーを追加する
- 移行先サービスにソーステーブルと同じ構造のテーブルを作成する
- ソースのネットワーク疎通状況に応じて、ソースから移行先へデータをプルするか、ソースからデータをプッシュする
- 移行先側の IP Access List からソースサーバーを削除する(該当する場合)
- ソースサービスから読み取り専用ユーザーを削除する
あるシステムから別のシステムへのテーブル移行:
この例では、セルフマネージド ClickHouse サーバーから ClickHouse Cloud へ 1 つのテーブルを移行する方法を示します。
ソースとなる ClickHouse システム上(現在データをホストしているシステム)
- ソーステーブル(この例では
db.table)を参照できる読み取り専用ユーザーを追加します
- テーブル定義をコピーします
宛先側の ClickHouse Cloud システムで行う操作:
- 宛先データベースを作成します。
- ソース側の CREATE TABLE 文を使用して、移行先にテーブルを作成します。
CREATE 文を実行する際は、ENGINE をパラメータなしの ReplicatedMergeTree に変更してください。ClickHouse Cloud は常にテーブルをレプリケートし、適切なパラメータを自動的に設定します。ただし、ORDER BY、PRIMARY KEY、PARTITION BY、SAMPLE BY、TTL、SETTINGS の各句はそのまま保持してください。
- セルフマネージドな ClickHouse からデータを取得するために
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 サービスがあり、それぞれを source と destination と呼びます。データは source から destination へプルされます。必要であればプッシュすることもできますが、ここでは read-only ユーザーを利用するため、プルの方法を示します。

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