Skip to main content
Edit this page

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

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

ClickHouse、より具体的にはclickhouse-localをETLツールとして使用し、現在のデータベースシステムからClickHouse Cloudにデータを移行することができます。これは、現在のデータベースシステムにClickHouseが提供するインテグレーションエンジンまたはテーブル関数があるか、またはベンダーが提供するJDBCドライバまたはODBCドライバが利用可能である限りです。

この移行方法を「ピボット」方式と呼ぶこともあります。中間のピボットポイントまたはハブを使用して、ソースデータベースから宛先データベースにデータを移動するためです。たとえば、この方法は、セキュリティ要件のためにプライベートまたは内部ネットワークからの外向き接続のみが許可されている場合に必要になるかもしれません。そのため、clickhouse-localを使用してソースデータベースからデータを取得し、clickhouse-localがピボットポイントとして機能することで、データを宛先のClickHouseデータベースへプッシュする必要があります。

ClickHouseは、MySQLPostgreSQLMongoDB、そしてSQLiteのインテグレーションエンジンとテーブル関数(即座にインテグレーションエンジンを作成する)を提供しています。他のすべての一般的なデータベースシステムには、ベンダーから利用可能なJDBCドライバまたはODBCドライバがあります。

clickhouse-localとは?

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

通常、ClickHouseはクラスタ形式で実行され、いくつかのClickHouseデータベースエンジンのインスタンスが異なるサーバで分散的に実行されます。

シングルサーバでは、ClickHouseデータベースエンジンはclickhouse-serverプログラムの一部として実行されます。データベースアクセス(パス、ユーザー、セキュリティなど)はサーバー構成ファイルで設定されます。

clickhouse-localツールは、ClickHouseサーバーを設定したり起動したりすることなく、多くの入力と出力に対して超高速SQLデータ処理が可能な、コマンドラインユーティリティの形式でClickHouseデータベースエンジンを使用できるようにします。

clickhouse-localのインストール

clickhouse-localを使用するには、現在のソースデータベースシステムとClickHouse Cloudターゲットサービスの両方にネットワークアクセスできるホストマシンが必要です。

そのホストマシンで、コンピュータのオペレーティングシステムに基づいてclickhouse-localの適切なビルドをダウンロードします:

  1. clickhouse-localをローカルにダウンロードする最も簡単な方法は、次のコマンドを実行することです:

    curl https://clickhouse.com/ | sh
  2. clickhouse-localを実行します(バージョンが表示されるだけです):

    ./clickhouse-local
重要

このガイド全体での例は、clickhouse-localを実行するためにLinuxコマンド(./clickhouse-local)を使用しています。Macでclickhouse-localを実行する場合は、./clickhouse localを使用してください。

リモートシステムをClickHouse CloudサービスのIPアクセスリストに追加する

remoteSecure関数がClickHouse Cloudサービスに接続するためには、リモートシステムのIPアドレスがIPアクセスリストで許可されている必要があります。このヒントの下にあるManage your IP Access Listを展開して詳細を確認してください。

IPアクセスリストを管理する

ClickHouse Cloudのサービスリストから作業するサービスを選択し、セキュリティに切り替えます。IPアクセスリストに、ClickHouse Cloudサービスに接続する必要があるリモートシステムのIPアドレスや範囲が含まれていない場合は、エントリを追加して問題を解決できます。

サービスがトラフィックを許可しているか確認

ClickHouse Cloudサービスに接続する必要がある個別のIPアドレス、またはアドレスの範囲を追加します。フォームを適宜修正し、エントリを追加し、エントリを送信します。

現在のIPアドレスを追加

例1: MySQLからClickHouse Cloudへのインテグレーションエンジンによる移行

ソースのMySQLデータベースからデータを読み取るためにインテグレーションテーブルエンジンmysqlテーブル関数によって即座に作成)を使用し、ClickHouseクラウドサービス上の宛先テーブルにデータを書き込むためにremoteSecureテーブル関数を使用します。

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

宛先ClickHouse Cloudサービス上で:

宛先データベースを作成する:

CREATE DATABASE db

MySQLテーブルと等価なスキーマを持つ宛先テーブルを作成する:

CREATE TABLE db.table ...
Note

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');"
Note

データはclickhouse-localホストマシンにローカルで保存されません。代わりに、データはソースMySQLテーブルから読み取られ、即座にClickHouse Cloudサービス上の宛先テーブルに書き込まれます。

例2: MySQLからClickHouse CloudへのJDBCブリッジによる移行

ソースMySQLデータベースからデータを読み取るためにClickHouse JDBC BridgeおよびMySQL JDBCドライバとともにJDBCインテグレーションテーブルエンジンjdbcテーブル関数によって即座に作成)を使用し、ClickHouseクラウドサービス上の宛先テーブルにデータを書き込むためにremoteSecureテーブル関数を使用します。

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

宛先ClickHouse Cloudサービスで:

宛先データベースを作成する:

CREATE DATABASE db

MySQLテーブルと等価なスキーマを持つ宛先テーブルを作成する:

CREATE TABLE db.table ...
Note

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');"
Note

データはclickhouse-localホストマシンにローカルで保存されません。代わりに、データはMySQLソーステーブルから読み取られ、即座にClickHouse Cloudサービス上の宛先テーブルに書き込まれます。