【问题标题】:How to load data from AWS S3 to Snowflake Internal Stage如何将数据从 AWS S3 加载到 Snowflake Internal Stage
【发布时间】:2020-07-27 19:39:33
【问题描述】:

我们正在尝试从 AWS S3(外部阶段)获取数据并将其加载到 Snowflake 内部阶段。 Snowflake 应该充当我们的数据湖,并且可以减少我们从 AWS 使用的存储量。是否有任何内置功能可以从外部阶段->内部阶段传输数据?

目标是将数据加载到内部 Snowflake 阶段,然后从 AWS 中删除数据。我们希望 Snowflake 成为数据湖。

【问题讨论】:

    标签: database-migration snowflake-cloud-data-platform


    【解决方案1】:

    internal stage 是什么意思?

    如果您计划加载到 Snowflake 表中,您的场景是 Snowpipe 的完美用例,了解更多信息Automating Snowpipe for Amazon S3

    【讨论】:

    • 我确实计划使用 Snowpipe。被问到的问题是我们能否将原始数据存储在 Snowflake 中以将 Snowflake 用作数据湖并将存储移出 S3。我们希望减少 S3 的使用。我的计划,以及我在教程中学到的,是创建一个 RAW_INGEST 表来加载数据,然后在需要时转换为最终表。我知道这似乎是一个奇怪的要求,但这是对我的要求。
    • 是的。您可以“按原样”将数据移动到 Snowflake 中。你上面描述的方法很常见,叫做ELT我在我们的雪花环境中实现了同样的方法
    • 所以您建议将数据“按原样”移动到原始表中,对吗?这是我一直推荐的方法,但高层正在询问如何使用 Snowflake 作为数据湖。
    • @Dave 移动和处理数据的最佳方式取决于数据的类型 - 是表格、半结构化还是非结构化?
    • @Hotchips CSV(结构化)数据
    【解决方案2】:

    内部阶段只是 Snowflake 使用的不同 S3 存储桶。所以它并没有真正“减少”存储量,只是改变了它的位置。如果您仍然想这样做,您可以从外部阶段 GET 并 PUT 到内部阶段。或者,您可以通过任何可用方法从外部阶段加载到 Snowflake 中的表。

    【讨论】:

    • 目标只是将存储从 S3 中取出并放入 Snowflake 中,以使用 Snowflake 作为数据湖。考虑到这一点,您还会推荐 GET from S3 --> PUT 进入内部阶段吗?我不明白为什么这比创建一个RAW_INGEST 表来保存所有原始数据更好。一旦数据在 Snowflake 中,我将自动从 S3 中删除。
    • 另外为了澄清,GET 文档指出数据必须来自内部阶段。 S3 存储桶阶段在技术上是一个外部阶段。
    【解决方案3】:

    您必须停止认为“数据湖”是指存储在某个地方的云存储桶中的一堆原始数据文件。那是 2010 版的数据湖。 在 Snowflake 中,您可以将原始数据加载到镜像这些文件的表中(结构化的逐列,或半结构化的 JSON、XML、Parquet...)。将这些表格视为您的“原始”区域。使用 Streams 和 Tasks,您可以自动将原始区域中的数据整理到第二组表中 - “整理”区域。另一组 Streams/Tasks 可能会更进一步,将整理的数据预先聚合到“聚合”区域中。工作流程的设计取决于您。 云存储只是成为原始提取数据的“着陆区”,并且可以在摄取到 Snowflake 后删除。您现在拥有一个用于原始数据、精选数据和聚合数据的平台。连接 Alation 或 Collibra 等数据治理工具,以在整个过程中维护数据的沿袭。

    -保罗-

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2021-10-10
      • 2020-03-08
      • 1970-01-01
      相关资源
      最近更新 更多