从 Snowflake 迁移到 ClickHouse
本指南展示如何将数据从 Snowflake 迁移到 ClickHouse。
在 Snowflake 和 ClickHouse 之间迁移数据需要使用对象存储,例如 S3,作为传输的中间存储。迁移过程还依赖于使用 Snowflake 的 COPY INTO
命令和 ClickHouse 的 INSERT INTO SELECT
。
1. 从 Snowflake 导出数据

从 Snowflake 导出数据需要使用外部阶段,如上图所示。
假设我们想导出一个具有以下模式的 Snowflake 表:
要将此表的数据移动到 ClickHouse 数据库,我们首先需要将数据复制到外部阶段。在复制数据时,我们建议使用 Parquet 作为中间格式,因为它允许共享类型信息,保持精度,压缩效果良好,并原生支持分析中常见的嵌套结构。
在下面的示例中,我们在 Snowflake 中创建一个命名的文件格式以表示 Parquet 及所需的文件选项。然后,我们指定哪个桶将包含我们复制的数据集。最后,我们将数据集复制到该桶。
对于大约 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 中插入时使用 JSONExtract 函数 将这些结构转换为元组,如上所示。
3. 测试数据导出是否成功
要测试您的数据是否正确插入,只需对新表运行 SELECT
查询: