Amazon Redshift から ClickHouse への移行ガイド
はじめに
Amazon Redshift は、Amazon Web Services の提供する人気のクラウドデータウェアハウスソリューションです。このガイドでは、Redshift インスタンスから ClickHouse へデータを移行するさまざまなアプローチを紹介します。3つのオプションを説明します:

ClickHouse インスタンスの観点から、以下のいずれかを選択できます:
-
サードパーティの ETL/ELT ツールまたはサービスを使用して ClickHouse にデータを PUSH する
-
ClickHouse JDBC Bridge を活用して Redshift からデータを PULL する
-
"Unload してから load" のロジックを使用して S3 オブジェクトストレージを使用した PIVOT を行う
このチュートリアルでは Redshift をデータソースとして使用しました。ただし、ここで紹介する移行アプローチは Redshift に限定されるものではなく、互換性のある任意のデータソースに対して同様の手順を導き出すことができます。
Redshift から ClickHouse へデータをプッシュする
プッシュシナリオでは、サードパーティのツールまたはサービス(カスタムコードまたは ETL/ELT)を活用して、ClickHouse インスタンスにデータを送信するという考え方です。例えば、Airbyte のようなソフトウェアを使用して、Redshift インスタンス(ソースとして)と ClickHouse(宛先として)の間でデータを移動できます(Airbyte の統合ガイドを参照)

メリット
- ETL/ELT ソフトウェアの既存のコネクタカタログを活用できます。
- データを同期状態に保つための組み込み機能(追加/上書き/増分ロジック)。
- データ変換シナリオを有効にします(例えば、dbt の統合ガイドを参照)。
デメリット
- ETL/ELT インフラストラクチャのセットアップと維持が必要です。
- アーキテクチャにサードパーティ要素を導入し、潜在的なスケーラビリティのボトルネックになる可能性があります。
Redshift から ClickHouse へデータをプルする
プルシナリオでは、ClickHouse JDBC Bridge を活用して、ClickHouse インスタンスから直接 Redshift クラスタに接続し、INSERT INTO ... SELECT クエリを実行するという考え方です:

メリット
- すべての JDBC 互換ツールに汎用的
- ClickHouse 内から複数の外部データソースをクエリできるエレガントなソリューション
デメリット
- ClickHouse JDBC Bridge インスタンスが必要であり、潜在的なスケーラビリティのボトルネックになる可能性があります
Redshift は PostgreSQL をベースにしていますが、ClickHouse では PostgreSQL バージョン 9 以降が必要であり、Redshift API はそれより前のバージョン(8.x)をベースにしているため、ClickHouse PostgreSQL テーブル関数またはテーブルエンジンを使用することはできません。
チュートリアル
このオプションを使用するには、ClickHouse JDBC Bridge をセットアップする必要があります。ClickHouse JDBC Bridge は、JDBC 接続を処理し、ClickHouse インスタンスとデータソースの間のプロキシとして機能するスタンドアロンの Java アプリケーションです。このチュートリアルでは、サンプルデータベースを事前に投入した Redshift インスタンスを使用しました。
ClickHouse JDBC Bridge をデプロイする
ClickHouse JDBC Bridge をデプロイします。詳細については、外部データソース用 JDBC のユーザーガイドを参照してください
ClickHouse Cloud を使用している場合は、ClickHouse JDBC Bridge を別の環境で実行し、remoteSecure 関数を使用して ClickHouse Cloud に接続する必要があります
Redshift データソースを設定する
ClickHouse JDBC Bridge 用に Redshift データソースを設定します。例: /etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
ClickHouse から Redshift インスタンスをクエリする
ClickHouse JDBC Bridge がデプロイされ実行されたら、ClickHouse から Redshift インスタンスをクエリできます
S3 を使用して Redshift から ClickHouse へデータをピボットする
このシナリオでは、中間ピボットフォーマットで S3 にデータをエクスポートし、2番目のステップで S3 から ClickHouse にデータをロードします。

メリット
- Redshift と ClickHouse の両方が強力な S3 統合機能を持っています。
- Redshift の
UNLOADコマンドや ClickHouse S3 テーブル関数/テーブルエンジンなどの既存機能を活用します。 - ClickHouse での並列読み取りと高スループット機能により、S3 との間でシームレスにスケールします。
- Apache Parquet のような洗練された圧縮フォーマットを活用できます。
デメリット
- プロセスが2ステップ(Redshift からアンロード、次に ClickHouse にロード)になります。
チュートリアル
ClickHouse でテーブルを作成する
ClickHouse でテーブルを作成します:
あるいは、ClickHouse は CREATE TABLE ... EMPTY AS SELECT を使用してテーブル構造を推測できます:
これは、Parquet のようなデータ型に関する情報を含むフォーマットの場合に特によく機能します。
S3 ファイルを ClickHouse にロードする
INSERT INTO ... SELECT ステートメントを使用して S3 ファイルを ClickHouse にロードします:
この例では CSV をピボットフォーマットとして使用しました。ただし、本番ワークロードでは、大規模な移行には Apache Parquet を最良のオプションとして推奨します。圧縮機能を備えており、転送時間を短縮しながらストレージコストを節約できます。(デフォルトでは、各行グループは SNAPPY を使用して圧縮されます)。ClickHouse は Parquet のカラム指向を活用して、データ取り込みを高速化します。

