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

Snowflakeからデータをエクスポートするには、上記の図に示されているように外部ステージを使用する必要があります。
次のスキーマを持つSnowflakeテーブルをエクスポートしたいとしましょう。
このテーブルのデータをClickHouseデータベースに移動するには、まずこのデータを外部ステージにコピーする必要があります。データをコピーする際には、型情報を共有し、精度を保持し、圧縮性能が高く、分析に一般的なネスト構造をネイティブにサポートするため、間接フォーマットとしてParquetを推奨します。
以下の例では、Parquetを表す名前付きファイルフォーマットをSnowflakeで作成し、希望するファイルオプションを指定します。次に、コピーしたデータセットが格納されるバケットを指定します。最後に、データセットをバケットにコピーします。
約5TBのデータセットで最大ファイルサイズが150MB、AWSのus-east-1
リージョンにある2X-LargeのSnowflakeウェアハウスを使用している場合、データをS3バケットにコピーするには約30分かかります。
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文字列に変換されます。このデータをインポートするには、 JSONExtract関数 を使用して、ClickHouseに挿入する際にこれらの構造をタプルに変換する必要があります。