RedshiftからClickHouseへのデータ移行
関連コンテンツ
はじめに
Amazon Redshift は、Amazon Web Services の一部である人気のクラウドデータウェアハウジングソリューションです。このガイドでは、RedshiftインスタンスからClickHouseへのデータ移行の異なるアプローチを紹介します。以下の3つの選択肢を扱います。

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

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

メリット
- すべてのJDBC互換ツールに対して一般的である
- ClickHouse内から複数の外部データソースをクエリするためのエレガントなソリューション
デメリット
- スケーラビリティのボトルネックになる可能性があるClickHouse JDBCブリッジインスタンスが必要
RedshiftはPostgreSQLに基づいていますが、ClickHouseのPostgreSQLテーブル関数やテーブルエンジンを使用することはできません。ClickHouseはPostgreSQLのバージョン9以上を必要とし、Redshift APIは以前のバージョン(8.x)に基づいているためです。
チュートリアル
このオプションを使用するには、ClickHouse JDBCブリッジを設定する必要があります。ClickHouse JDBCブリッジは、JDBC接続を処理し、ClickHouseインスタンスとデータソースの間のプロキシとして機能するスタンドアロンのJavaアプリケーションです。このチュートリアルでは、サンプルデータベースを持つ事前にポピュレートされたRedshiftインスタンスを使用しました。
- ClickHouse JDBCブリッジをデプロイします。詳細は、外部データソース用JDBCのユーザーガイドを参照してください。
ClickHouse Cloudを使用している場合、ClickHouse JDBCブリッジを別の環境で実行し、remoteSecure関数を使用してClickHouse Cloudに接続する必要があります。
- ClickHouse JDBCブリッジ用のRedshiftデータソースを構成します。たとえば、
/etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
- ClickHouse JDBCブリッジがデプロイされ、動作している場合、ClickHouseからRedshiftインスタンスをクエリすることができます。
- 次に、
INSERT INTO ... SELECT
ステートメントを使用してデータをインポートする方法を示します。
S3を使用したRedshiftからClickHouseへのデータピボット
このシナリオでは、S3に中間ピボット形式でデータをエクスポートし、次のステップでS3からClickHouseにデータをロードします。

メリット
- RedshiftとClickHouseの両方が強力なS3統合機能を持っています。
- Redshiftの
UNLOAD
コマンドとClickHouseのS3テーブル関数/テーブルエンジンなどの既存機能を活用できます。 - ClickHouseにおけるS3との間での並列読み取りと高スループット機能により、シームレスにスケール可能です。
- Apache Parquetのような高度で圧縮されたフォーマットを利用できます。
デメリット
- プロセスに2つのステップがあります(Redshiftからのアンロード後、ClickHouseへのロード)。
チュートリアル
-
RedshiftのUNLOAD機能を使用して、既存のプライベートS3バケットにデータをエクスポートします:
これにより、生データを含む部分ファイルがS3に生成されます。
-
ClickHouseでテーブルを作成します:
あるいは、ClickHouseは
CREATE TABLE ... EMPTY AS SELECT
を使用してテーブル構造を自動推論できる場合もあります:これは、データがデータ型に関する情報を含む形式(パーケットなど)である場合に特に有効です。
-
INSERT INTO ... SELECT
ステートメントを使用してS3ファイルをClickHouseにロードします:
この例ではCSVをピボット形式として使用しました。ただし、プロダクションワークロードではApache Parquetを大規模な移行に最適なオプションとしてお勧めします。Parquetは圧縮を行い、ストレージコストを削減しつつ転送時間を短縮できます(デフォルトでは、それぞれの行グループはSNAPPYを使用して圧縮されます)。ClickHouseもParquetの列指向を利用してデータ取り込みを加速しています。