メインコンテンツまでスキップ
メインコンテンツまでスキップ

Snowflake から ClickHouse への移行

このガイドでは、Snowflake から ClickHouse へのデータ移行方法を示します。

Snowflake と ClickHouse の間でデータを移動するには、S3 などのオブジェクトストレージを中間ストレージとして利用する必要があります。移行プロセスは、Snowflake の COPY INTO コマンドと ClickHouse の INSERT INTO SELECT コマンドを使用します。

1. Snowflake からのデータのエクスポート

Snowflake から ClickHouse への移行

Snowflake からデータをエクスポートするには、外部ステージを使用する必要があります。上記の図のように。

Snowflake テーブルの以下のスキーマをエクスポートしたいとしましょう。

このテーブルのデータを ClickHouse データベースに移動するには、まずこのデータを外部ステージにコピーする必要があります。データをコピーする際は、型情報が共有できるため、精度が保持され、圧縮にも適しており、分析によく使われるネスト構造をネイティブにサポートする Parquet を中間形式として推奨します。

以下の例では、Parquet を表現し、希望のファイルオプションを設定するために、Snowflake に名前の付いたファイル形式を作成します。次に、コピーしたデータセットを含むバケットを指定します。最後に、データセットをバケットにコピーします。

約 5TB のデータセットを持つ場合、最大ファイルサイズを 150MB とし、同じ AWS us-east-1 リージョンにある 2X-Large Snowflake ウェアハウスを使用すると、データを S3 バケットにコピーするのに約 30 分かかります。

2. ClickHouse へのインポート

データが中間のオブジェクトストレージに配置されたら、ClickHouse の関数、例えば s3 テーブル関数 を使用して、データをテーブルに挿入できます。

この例では、AWS S3 用の s3 テーブル関数 を使用していますが、Google Cloud Storage 用の gcs テーブル関数 や Azure Blob Storage 用の azureBlobStorage テーブル関数 も使用できます。

以下のようなテーブルのターゲットスキーマを仮定します。

次に、INSERT INTO SELECT コマンドを使用して、S3 から ClickHouse テーブルにデータを挿入できます。

ネストしたカラム構造に関する注意

元の Snowflake テーブルスキーマの VARIANT および OBJECT カラムは、デフォルトで JSON 文字列として出力されるため、ClickHouse に挿入する際にキャストする必要があります。

some_file のようなネスト構造は、Snowflake でコピー時に JSON 文字列に変換されます。このデータをインポートするには、ClickHouse で挿入時にこれらの構造を Tuple に変換する必要があります。上記のように JSONExtract 関数 を使用します。

3. データエクスポートの成功を確認する

データが正しく挿入されたかどうかを確認するには、単純に新しいテーブルで SELECT クエリを実行します。

さらなる読み物とサポート

このガイドに加えて、Snowflake と ClickHouse を比較したブログ記事 clickhouse-vs-snowflake-for-real-time-analytics-comparison-migration-guide を読むことをお勧めします。

Snowflake から ClickHouse へのデータ移行に問題が発生した場合は、お気軽に [email protected] までお問い合わせください。