Amazon Redshift から ClickHouse への移行ガイド
Introduction
Amazon Redshift は、Amazon Web Services が提供する人気のあるクラウドデータウェアハウジングソリューションです。このガイドでは、Redshift インスタンスから ClickHouse へのデータ移行のさまざまなアプローチを紹介します。以下の三つのオプションをカバーします:

ClickHouse インスタンスの観点から、次のいずれかを行うことができます:
-
PUSH サードパーティの ETL/ELT ツールまたはサービスを使用して ClickHouse にデータを送信する
-
PULL ClickHouse JDBC ブリッジを利用して Redshift からデータを取得する
-
PIVOT S3 オブジェクトストレージを使用して「アンロードしてからロードする」ロジックを用いる
このチュートリアルでは Redshift をデータソースとして使用しました。ただし、ここで示される移行方法は Redshift に限定されず、互換性のあるデータソースについても同様の手順が導き出せます。
Push Data from Redshift to ClickHouse
プッシュシナリオでは、サードパーティのツールまたはサービス(カスタムコードまたは ETL/ELT)を利用して、データを ClickHouse インスタンスに送ることを目的としています。例えば、Airbyte のようなソフトウェアを使用して、Redshift インスタンス(ソース)から ClickHouse(宛先)にデータを移動させることができます(Airbyte の統合ガイドを参照してください)。

Pros
- ETL/ELT ソフトウェアの既存のコネクタカタログを活用できる。
- データを同期するための組み込み機能(追加/上書き/インクリメントロジック)。
- データ変換シナリオを可能にする(例えば、dbt の統合ガイドを参照してください)。
Cons
- ユーザーは ETL/ELT インフラをセットアップおよび維持する必要がある。
- アーキテクチャにサードパーティの要素を導入するため、潜在的なスケーラビリティのボトleneckとなる可能性がある。
Pull Data from Redshift to ClickHouse
プルシナリオでは、ClickHouse JDBC ブリッジを利用して Redshift クラスターに直接接続し、INSERT INTO ... SELECT
クエリを実行することを目的としています:

Pros
- すべての JDBC 互換ツールに対して一般的
- ClickHouse から複数の外部データソースをクエリするためのエレガントなソリューション
Cons
- ClickHouse JDBC ブリッジインスタンスが必要であり、これが潜在的なスケーラビリティのボトleneckとなる可能性がある
Redshift は PostgreSQL に基づいていますが、ClickHouse は PostgreSQL バージョン 9 以上を必要とするため、ClickHouse の PostgreSQL テーブル関数またはテーブルエンジンを使用することはできません。Redshift API は古いバージョン(8.x)に基づいています。
Tutorial
このオプションを使用するには、ClickHouse JDBC ブリッジをセットアップする必要があります。ClickHouse JDBC ブリッジは、JDBC 接続を処理し、ClickHouse インスタンスとデータソースの間のプロキシとして機能するスタンドアロンの Java アプリケーションです。このチュートリアルでは、サンプルデータベースが用意された Redshift インスタンスを使用しました。
Deploy ClickHouse JDBC Bridge
ClickHouse JDBC ブリッジを展開します。詳細については、外部データソース向けJDBCのユーザーガイドをご覧ください。
ClickHouse Cloud を使用している場合、ClickHouse JDBC ブリッジを別の環境で実行し、remoteSecure 関数を使用して ClickHouse Cloud に接続する必要があります。
Configure your Redshift datasource
ClickHouse JDBC ブリッジ用に Redshift データソースを設定します。例えば、/etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
Query your Redshift instance from ClickHouse
ClickHouse JDBC ブリッジを展開して実行後、ClickHouse から Redshift インスタンスにクエリを開始することができます。
Pivot Data from Redshift to ClickHouse using S3
このシナリオでは、データを中間ピボット形式で S3 にエクスポートし、次のステップで S3 から ClickHouse にデータをロードします。

Pros
- Redshift と ClickHouse の両方が強力な S3 統合機能を備えています。
- Redshift の
UNLOAD
コマンド及び ClickHouse S3 テーブル関数 / テーブルエンジンなど、既存の機能を活用します。 - ClickHouse の S3 への並行読み取りおよび高スループット機能によりスムーズにスケールします。
- Apache Parquet のような高度で圧縮されたフォーマットを活用できます。
Cons
- プロセスは二つのステップ(Redshift からアンロード後、ClickHouse にロード)があります。
Tutorial
Create the table in ClickHouse
ClickHouse にテーブルを作成します:
また、ClickHouse は CREATE TABLE ... EMPTY AS SELECT
を使用してテーブル構造を推測することもできます:
これは、データがデータ型に関する情報を含むフォーマット(例えば、Parquet)の場合に特に良く機能します。
Load S3 files into ClickHouse
INSERT INTO ... SELECT
ステートメントを使用して S3 ファイルを ClickHouse にロードします:
この例ではピボット形式として CSV を使用しました。ただし、本番のワークロードでは、圧縮があり、転送時間を短縮しつつストレージコストを削減できるため、大規模な移行に最適なオプションとして Apache Parquet を推奨します(デフォルトでは、各行グループは SNAPPY を使用して圧縮されています)。ClickHouse はまた、Parquet の列指向を活用してデータ取り込みを高速化します。