【发布时间】:2020-11-09 08:41:22
【问题描述】:
我有一些数据存储在 S3 存储桶中,我想将其加载到我的一个 Snowflake 数据库中。请您帮助我更好地理解以下两点:
-
从文档 (https://docs.snowflake.com/en/user-guide/data-load-s3.html) 中,我看到最好先创建一个外部阶段,然后再使用 COPY INTO 操作加载数据,但这不是强制性的。 ==> 创建这个外部步骤的优点/用途是什么,如果你不创建它,在后台会发生什么 ==> 在 COPY INTO doc 中,说数据必须预先暂存。如果数据没有暂存,Snowflake 会创建一个临时阶段?
-
如果我的 S3 存储桶与我的雪花数据库不在同一个区域,是否仍然可以直接加载数据,或者必须先将数据传输到与雪花数据库相同区域的另一个 S3 存储桶? 由于网络传输时间,我希望它仍然可能但速度较慢?
提前致谢
【问题讨论】:
-
1.这不是强制性的,但如果您想定期批量加载,建议您这样做。如果是一次性off,请参见此处如何直接加载。 2. 也不是强制性的,但确实会因为网络流量而变慢。
-
一般情况下,数据必须在 Snowflake 加载之前进行暂存(您也可以通过 WebUI 加载小文件)。 Snowflake 自动为每个用户创建一个“用户阶段”,为每个表创建一个“表阶段”;将数据复制到这些阶段然后允许将其加载到雪花表中(用户阶段到任何表,表阶段仅到关联表)。用户可以创建命名阶段,这些阶段可以是内部的或外部的:内部显然位于您的 Snowflake 帐户中;指向受支持的云位置(S3、Azure、谷歌云存储)的外部点
-
@NickW 这不是真的。我相信问题是创建舞台对象的好处是什么。您无需定义外部阶段即可从 S3 存储桶加载数据。您可以直接引用 S3 存储桶并在没有阶段对象的情况下加载数据。
-
@MikeWalton 感谢您的更正 - 知道我什么时候错了总是有用的!您的答案非常全面(与我的相比也很准确)——我能想到的阶段的唯一其他重要优势是您可以直接查询它。我不相信您可以在不创建阶段(或外部表)的情况下查询外部文件?
标签: amazon-s3 snowflake-cloud-data-platform