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

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] までお問い合わせください。