将Hadoop事务表复制到Snowflake

时间:2019-01-23 12:15:05

标签: snowflake-datawarehouse snowflake

当前,我们正在使用Hadoop和Snowflake存储数据。

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

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

如何在Snowflake中解决此问题?

3 个答案:

答案 0 :(得分:1)

通常将三种策略用于此类情况:

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

答案 1 :(得分:0)

为时已晚,但是一种可能且更准确的解决方案是:

  1. 动态创建过渡表,并将您的每小时过渡数据复制到该过渡表中。
  2. 合并到最终表中:从步骤1中创建的过渡表中,合并到基于您的PK的最终表中。

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

答案 2 :(得分:-1)

在这种情况下,请使用Snowflake MERGE命令将行更新/插入目标表。除此之外,您还可以探索Snowflake CDC,以仅加载先前时刻与当前时刻之间的变化增量:https://docs.snowflake.net/manuals/user-guide/streams.html