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

ClickHouse、より具体的にはclickhouse-local
をETLツールとして使用し、現在のデータベースシステムからClickHouse Cloudにデータを移行することができます。これは、現在のデータベースシステムにClickHouseが提供するインテグレーションエンジンまたはテーブル関数があるか、またはベンダーが提供するJDBCドライバまたはODBCドライバが利用可能である限りです。
この移行方法を「ピボット」方式と呼ぶこともあります。中間のピボットポイントまたはハブを使用して、ソースデータベースから宛先データベースにデータを移動するためです。たとえば、この方法は、セキュリティ要件のためにプライベートまたは内部ネットワークからの外向き接続のみが許可されている場合に必要になるかもしれません。そのため、clickhouse-localを使用してソースデータベースからデータを取得し、clickhouse-localがピボットポイントとして機能することで、データを宛先のClickHouseデータベースへプッシュする必要があります。
ClickHouseは、MySQL、PostgreSQL、MongoDB、そしてSQLiteのインテグレーションエンジンとテーブル関数(即座にインテグレーションエンジンを作成する)を提供しています。他のすべての一般的なデータベースシステムには、ベンダーから利用可能な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
をローカルにダウンロードする最も簡単な方法は、次のコマンドを実行することです:curl https://clickhouse.com/ | sh
clickhouse-local
を実行します(バージョンが表示されるだけです):./clickhouse-local
clickhouse-local
をローカルにダウンロードする最も簡単な方法は、次のコマンドを実行することです:curl https://clickhouse.com/ | sh
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のサービスリストから作業するサービスを選択し、セキュリティに切り替えます。IPアクセスリストに、ClickHouse Cloudサービスに接続する必要があるリモートシステムのIPアドレスや範囲が含まれていない場合は、エントリを追加して問題を解決できます。
ClickHouse Cloudサービスに接続する必要がある個別のIPアドレス、またはアドレスの範囲を追加します。フォームを適宜修正し、エントリを追加し、エントリを送信します。
例1: MySQLからClickHouse Cloudへのインテグレーションエンジンによる移行
ソースのMySQLデータベースからデータを読み取るためにインテグレーションテーブルエンジン(mysqlテーブル関数によって即座に作成)を使用し、ClickHouseクラウドサービス上の宛先テーブルにデータを書き込むためにremoteSecureテーブル関数を使用します。

宛先ClickHouse Cloudサービス上で:
宛先データベースを作成する:
CREATE DATABASE db
MySQLテーブルと等価なスキーマを持つ宛先テーブルを作成する:
CREATE TABLE db.table ...
ClickHouse Cloud宛先テーブルのスキーマとソースMySQLテーブルのスキーマは一致している必要があります(カラム名と順序が同じであり、カラムのデータ型が互換性がある必要があります)。
clickhouse-localホストマシンで:
マイグレーションクエリでclickhouse-localを実行する:
./clickhouse-local --query "
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS')
SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');"
データはclickhouse-local
ホストマシンにローカルで保存されません。代わりに、データはソースMySQLテーブルから読み取られ、即座にClickHouse Cloudサービス上の宛先テーブルに書き込まれます。
例2: MySQLからClickHouse CloudへのJDBCブリッジによる移行
ソースMySQLデータベースからデータを読み取るためにClickHouse JDBC BridgeおよびMySQL JDBCドライバとともにJDBCインテグレーションテーブルエンジン(jdbcテーブル関数によって即座に作成)を使用し、ClickHouseクラウドサービス上の宛先テーブルにデータを書き込むためにremoteSecureテーブル関数を使用します。

宛先ClickHouse Cloudサービスで:
宛先データベースを作成する:
CREATE DATABASE db
MySQLテーブルと等価なスキーマを持つ宛先テーブルを作成する:
CREATE TABLE db.table ...
ClickHouse Cloud宛先テーブルのスキーマとソースMySQLテーブルのスキーマは一致している必要があります。例えば、カラム名と順序が同じである必要があり、カラムのデータ型は互換性がある必要があります。
clickhouse-localホストマシンで:
ClickHouse JDBC Bridgeをローカルにインストール、設定、開始する:
ガイドでの手順に従ってください。このガイドにはMySQLからのデータソースを設定するための手順も含まれています。
マイグレーションクエリでclickhouse-localを実行する:
./clickhouse-local --query "
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS')
SELECT * FROM jdbc('datasource', 'database', 'table');"
データはclickhouse-local
ホストマシンにローカルで保存されません。代わりに、データはMySQLソーステーブルから読み取られ、即座にClickHouse Cloudサービス上の宛先テーブルに書き込まれます。