【问题标题】:Snowflake - Loading data loading data from cloud storageSnowflake - 从云存储加载数据加载数据
【发布时间】:2020-11-09 08:41:22
【问题描述】:

我有一些数据存储在 S3 存储桶中,我想将其加载到我的一个 Snowflake 数据库中。请您帮助我更好地理解以下两点:

  1. 从文档 (https://docs.snowflake.com/en/user-guide/data-load-s3.html) 中,我看到最好先创建一个外部阶段,然后再使用 COPY INTO 操作加载数据,但这不是强制性的。 ==> 创建这个外部步骤的优点/用途是什么,如果你不创建它,在后台会发生什么 ==> 在 COPY INTO doc 中,说数据必须预先暂存。如果数据没有暂存,Snowflake 会创建一个临时阶段?

  2. 如果我的 S3 存储桶与我的雪花数据库不在同一个区域,是否仍然可以直接加载数据,或者必须先将数据传输到与雪花数据库相同区域的另一个 S3 存储桶? 由于网络传输时间,我希望它仍然可能但速度较慢?

提前致谢

【问题讨论】:

  • 1.这不是强制性的,但如果您想定期批量加载,建议您这样做。如果是一次性off,请参见此处如何直接加载。 2. 也不是强制性的,但确实会因为网络流量而变慢。
  • 一般情况下,数据必须在 Snowflake 加载之前进行暂存(您也可以通过 WebUI 加载小文件)。 Snowflake 自动为每个用户创建一个“用户阶段”,为每个表创建一个“表阶段”;将数据复制到这些阶段然后允许将其加载到雪花表中(用户阶段到任何表,表阶段仅到关联表)。用户可以创建命名阶段,这些阶段可以是内部的或外部的:内部显然位于您的 Snowflake 帐户中;指向受支持的云位置(S3、Azure、谷歌云存储)的外部点
  • @NickW 这不是真的。我相信问题是创建舞台对象的好处是什么。您无需定义外部阶段即可从 S3 存储桶加载数据。您可以直接引用 S3 存储桶并在没有阶段对象的情况下加载数据。
  • @MikeWalton 感谢您的更正 - 知道我什么时候错了总是有用的!您的答案非常全面(与我的相比也很准确)——我能想到的阶段的唯一其他重要优势是您可以直接查询它。我不相信您可以在不创建阶段(或外部表)的情况下查询外部文件?

标签: amazon-s3 snowflake-cloud-data-platform


【解决方案1】:
  1. 创建外部阶段的主要优点是能够将文件格式直接绑定到阶段,而不必担心在每个COPY INTO 语句中定义它。您还可以绑定包含所有安全信息的连接对象,以使其对用户透明。最后,如果您有大量引用阶段的代码,但最终移动了存储桶,则无需更新任何代码。这对于 Dev 到 Prod 的迁移也很好。

  2. Snowflake 可以从任何 S3 存储桶加载,无论区域如何。 可能会慢一点,但不会比您将它复制到不同的存储桶然后加载到 Snowflake 慢。请注意,跨区域移动数据可能会产生一些来自 AWS 的出口费用。

【讨论】:

  • 感谢各位先生的解答!
猜你喜欢
  • 2017-02-10
  • 1970-01-01
  • 2020-03-08
  • 2017-12-16
  • 2019-02-17
  • 1970-01-01
  • 2018-10-27
  • 2019-05-04
  • 2013-08-25
相关资源
最近更新 更多