メインコンテンツへスキップ
メインコンテンツへスキップ

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

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

ClickHouse、より具体的には clickhouse-local を ETL ツールとして使用して、現在のデータベースシステムから ClickHouse Cloud へデータを移行できます。ただし、現在のデータベースシステムに対して、ClickHouse が提供する integration engine または table function が存在するか、あるいはベンダー提供の JDBC ドライバーまたは ODBC ドライバーが利用可能である必要があります。

この移行方法を「ピボット」方式と呼ぶことがあります。これは、データをソースデータベースから宛先データベースへ移動する際に、中間のピボットポイント(中継点)を利用するためです。たとえば、セキュリティ要件により、プライベートまたは内部ネットワーク内からはアウトバウンド接続のみが許可されている場合、この方法が必要になることがあります。その場合、clickhouse-local を使ってソースデータベースからデータをプルし、続いて clickhouse-local をピボットポイントとして利用しながら、データを宛先の ClickHouse データベースへプッシュします。

ClickHouse は、MySQLPostgreSQLMongoDBSQLite 向けの integration engine と(オンザフライで integration engine を作成する)table function を提供しています。 その他の主要なデータベースシステムについては、システムのベンダーから 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
  1. 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 のサービス一覧から対象のサービスを選択し、Settings に切り替えます。IP アクセスリストに、ClickHouse Cloud サービスへ接続する必要があるリモートシステムの IP アドレスまたはアドレス範囲が含まれていない場合は、Add IPs を使用して解決できます。

サービスが IP アクセスリストで自分の IP アドレスからのトラフィックを許可しているかを確認する

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

自分の現在の IP アドレスを ClickHouse Cloud の IP アクセスリストに追加する

例 1: Integration エンジンを使用して MySQL から ClickHouse Cloud へ移行する

ソースの MySQL データベースからデータを読み取るために、integration table enginemysql table function によってその場で作成されます)を使用し、remoteSecure table function を使用して、宛先である ClickHouse Cloud 上のテーブルにデータを書き込みます。

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

移行先の 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: JDBC ブリッジを使用して MySQL から ClickHouse Cloud へ移行する

ソースの MySQL データベースからデータを読み取るために、jdbc table function によってオンデマンドで作成される JDBC integration table engine を、ClickHouse JDBC Bridge と MySQL JDBC ドライバーと組み合わせて使用します。データを書き込む際には、remoteSecure table function を使用して、宛先となる ClickHouse Cloud サービス上のテーブルにデータを書き込みます。

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

宛先の ClickHouse Cloud サービスで:

ターゲットデータベースを作成します:

  CREATE DATABASE db