问题描述
SNowflake 允许使用不同路径将不同结构的文件放在一个阶段。 另一方面,我们可以将相同结构的文件放在不同的阶段。
stage 是存储一个模式的几个表还是 stage 是存储分区表的数据? 通常的做法是什么?
解决方法
Snowflake 有几种不同类型的阶段:
内部阶段(Named、User 和 Table):通过这些类型的阶段,您可以将文件直接上传到 Snowflake。如果您想从单个阶段将数据加载到多个表中,您可以使用“命名”或“用户”阶段。创建表时会自动创建“表”阶段,它仅用于将数据加载到单个表中。对于所有内部阶段,您通常使用 SnowSQL 从本地计算机或服务器将数据上传到 Snowflake,然后将复制命令运行到表中。
外部阶段 (External Stages):根据我的经验,外部阶段是最常见的。您在 Snowflake 中创建一个阶段,指向云提供商的 blob 存储服务(s3、gcs、azure blob)。这些文件不像内部阶段那样存储在 Snowflake 中,它们存储在 s3(或其他)中,您可以运行复制命令以加载到任何表中。
没有正确答案,您可以使用内部(命名或用户)或外部阶段加载到多个表中。我的偏好是使用外部阶段,这样数据就驻留在 Snowflake 之外,必要时也可以加载到其他工具中。