clickhouse-local を使用した ClickHouse への移行

ClickHouse、より具体的には clickhouse-local を ETL ツールとして使用して、現在のデータベースシステムから ClickHouse Cloud へデータを移行できます。ただし、現在のデータベースシステムに対して、ClickHouse が提供する integration engine または table function が存在するか、あるいはベンダー提供の JDBC ドライバーまたは ODBC ドライバーが利用可能である必要があります。
この移行方法を「ピボット」方式と呼ぶことがあります。これは、データをソースデータベースから宛先データベースへ移動する際に、中間のピボットポイント(中継点)を利用するためです。たとえば、セキュリティ要件により、プライベートまたは内部ネットワーク内からはアウトバウンド接続のみが許可されている場合、この方法が必要になることがあります。その場合、clickhouse-local を使ってソースデータベースからデータをプルし、続いて clickhouse-local をピボットポイントとして利用しながら、データを宛先の ClickHouse データベースへプッシュします。
ClickHouse は、MySQL、PostgreSQL、MongoDB、SQLite 向けの integration engine と(オンザフライで integration engine を作成する)table function を提供しています。 その他の主要なデータベースシステムについては、システムのベンダーから JDBC ドライバーまたは ODBC ドライバーが提供されています。
clickhouse-local とは何ですか?

通常、ClickHouse はクラスタとして実行され、複数の ClickHouse データベースエンジンのインスタンスが、異なるサーバー上で分散して動作します。
単一サーバー上では、ClickHouse データベースエンジンは clickhouse-server プログラムの一部として実行されます。データベースへのアクセス (パス、ユーザー、セキュリティなど) は、サーバーの設定ファイルで定義します。
clickhouse-local ツールを使用すると、ClickHouse サーバーを構成して起動することなく、多様な入力および出力に対してきわめて高速な SQL データ処理を行うために、ClickHouse データベースエンジンを独立したコマンドラインユーティリティとして利用できます。
clickhouse-local のインストール
clickhouse-local 用に、現在のソースデータベースシステムと ClickHouse Cloud のターゲットサービスの両方にネットワーク経由でアクセス可能なホストマシンが必要です。
そのホストマシン上で、使用しているオペレーティングシステムに応じて、適切なビルドの clickhouse-local をダウンロードします。
- Linux
- macOS
clickhouse-localをローカル環境にダウンロードする最も簡単な方法は、次のコマンドを実行することです。
clickhouse-localを実行します(バージョンが表示されるだけです)。
clickhouse-localをローカル環境にダウンロードする最も簡単な方法は、次のコマンドを実行することです。
clickhouse-localを実行します(バージョンが表示されるだけです)。
このガイド全体の例では、clickhouse-local を実行するために Linux のコマンド(./clickhouse-local)を使用しています。
Mac で clickhouse-local を実行するには、./clickhouse local を使用します。
remoteSecure 関数が ClickHouse Cloud サービスに接続できるようにするには、リモートシステムの IP アドレスが IP アクセスリストで許可されている必要があります。詳細については、このヒントの下にある Manage your IP Access List を展開してください。
IP アクセスリストを管理する
ClickHouse Cloud のサービス一覧から対象のサービスを選択し、Settings に切り替えます。IP アクセスリストに、ClickHouse Cloud サービスへ接続する必要があるリモートシステムの IP アドレスまたはアドレス範囲が含まれていない場合は、Add IPs を使用して解決できます。

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

例 1: Integration エンジンを使用して MySQL から ClickHouse Cloud へ移行する
ソースの MySQL データベースからデータを読み取るために、integration table engine(mysql table function によってその場で作成されます)を使用し、remoteSecure table function を使用して、宛先である ClickHouse Cloud 上のテーブルにデータを書き込みます。

移行先の ClickHouse Cloud サービスにおいて:
宛先データベースを作成する:
MySQL テーブルと同じスキーマを持つ宛先テーブルを作成します:
ClickHouse Cloud の宛先テーブルのスキーマと、元の MySQL テーブルのスキーマは揃っている必要があります(カラム名と順序が同じであり、かつカラムのデータ型が互換性を持っている必要があります)。
clickhouse-local を実行しているホストマシン上で:
マイグレーション用のクエリを指定して clickhouse-local を実行する:
clickhouse-local ホストマシン上にデータがローカル保存されることはありません。代わりに、データはソースの MySQL テーブルから読み込まれ、そのまま ClickHouse Cloud サービス上の宛先テーブルに書き込まれます。
例 2: JDBC ブリッジを使用して MySQL から ClickHouse Cloud へ移行する
ソースの MySQL データベースからデータを読み取るために、jdbc table function によってオンデマンドで作成される JDBC integration table engine を、ClickHouse JDBC Bridge と MySQL JDBC ドライバーと組み合わせて使用します。データを書き込む際には、remoteSecure table function を使用して、宛先となる ClickHouse Cloud サービス上のテーブルにデータを書き込みます。
