将Hadoop事务表复制到Snowflake中



目前,我们使用Hadoop和Snowflake来存储我们的数据。

该过程是使用 DISTCP 将 Hadoop ORC 文件复制到 Snowflake s3 位置,然后从 S3 运行复制到 Snowflake 表。这会将Hadoop ORC表中的所有内容复制到Snowflake表中。

现在,我有一个新的要求,其中我的Hadoop表是一个事务表,现有条目每小时更新一次。如果我将 ORC 文件复制到 S3 并运行复制命令,它会向现有表添加更多条目,而不会更新现有的 1。

如何在雪花中解决这个问题?

通常有

三种策略用于这样的事情:

  • 定期重新加载所有内容 - 根据您的数据量,这可能是可能的和快速的(众所周知,Snowflake 每小时能够加载多个 TB)。您可以使用CREATE TABLE LIKECOPYSWAP的组合来事务性地执行此操作。
  • 仅识别和导出新行 - 不确定数据源是什么,但您可以做到这一点
  • 加载到雪花时,不要插入现有行。您需要有某种方法来确定哪些行是相同的,例如 ID 字段(或字段组合)。然后,您可以COPY到临时表中,然后使用 MERGE 合并新的/修改的行(有关各种可能的选项,请参阅文档)

有点晚了,但一个可能且更准确的解决方案是:

    动态创建瞬态表
  1. ,并将每小时转换数据复制到此瞬态表。
  2. 合并到最终表 :从步骤 1 中创建的瞬态表中,根据您的 PK 合并到最终表中。

这是维护快照表与日记表的典型情况。为了避免手动执行步骤 1,您还可以利用 SNOWPIPE。

在这种情况下,

请使用 Snowflake MERGE 命令将行更新/插入到目标表中。除此之外,您还可以探索雪花 CDC 以仅加载上一个时刻和当前时刻之间的更改增量:https://docs.snowflake.net/manuals/user-guide/streams.html

相关内容

  • 没有找到相关文章

最新更新