snowflake
sidebar_label: 'Snowflake' sidebar_position: 20 slug: '/migrations/snowflake' description: '从 Snowflake 迁移到 ClickHouse' keywords: ['migrate', 'migration', 'migrating', 'data', 'etl', 'elt', 'snowflake']
要将此表的数据移动到 ClickHouse 数据库,我们首先需要将数据复制到外部阶段。在复制数据时,我们建议使用 Parquet 作为中间格式,因为它允许共享类型信息,保留精度,压缩效果良好,并且原生支持在分析中常见的嵌套结构。
在下面的示例中,我们在 Snowflake 中创建一个命名文件格式来表示 Parquet 和所需的文件选项。然后,我们指定哪个存储桶将包含我们的复制数据集。最后,我们将数据集复制到该存储桶。
对于大约 5TB 的数据,最大文件大小为 150MB,并且使用一个位于同一 AWS us-east-1
区域的 2X-Large Snowflake 仓库,复制数据到 S3 存储桶大约需要 30 分钟。
2. 导入到 ClickHouse
一旦数据被临时存储在中间对象存储中,就可以使用 ClickHouse 函数,例如 s3 表函数,将数据插入表中,如下所示。
此示例使用 s3 表函数 针对 AWS S3,但可以使用 gcs 表函数 针对 Google Cloud Storage,使用 azureBlobStorage 表函数 针对 Azure Blob Storage。
假设目标表架构如下:
然后,我们可以使用 INSERT INTO SELECT
命令将 S3 中的数据插入 ClickHouse 表:
原始 Snowflake 表架构中的 VARIANT
和 OBJECT
列将默认输出为 JSON 字符串,迫使我们在将其插入 ClickHouse 时进行转换。
像 some_file
这样的嵌套结构在复制时会被 Snowflake 转换为 JSON 字符串。导入这些数据需要我们在 ClickHouse 中插入时将这些结构转换为 Tuples,使用如上所示的 JSONExtract 函数。
3. 测试成功的数据导出
要测试数据是否正确插入,只需在新表上运行 SELECT
查询:
进一步阅读和支持
除了本指南,我们还建议阅读我们的博客文章 比较 Snowflake 和 ClickHouse。
如果您在将数据从 Snowflake 传输到 ClickHouse 时遇到问题,请随时通过 [email protected] 联系我们。