将 Hadoop Transactional table 复制到 Snowflake
Copy Hadoop Transactional table into Snowflake
目前,我们正在使用 Hadoop 和 Snowflake 来存储我们的数据。
该过程是使用 DISTCP 将 Hadoop ORC 文件复制到 Snowflake s3 位置,然后 运行 从 S3 复制到 Snowflake table。这会将 Hadoop ORC table 中的所有内容复制到 Snowflake table.
现在,我有一个新要求,其中我的 Hadoop table 是事务性的 table 并且现有条目每小时更新一次。如果我将 ORC 文件复制到 S3 和 运行 复制命令,它会将更多条目添加到现有的 table 而不会更新现有的 1s.
如何解决 Snowflake 中的这个问题?
通常使用三种策略来处理这样的事情:
- 定期重新加载所有内容 - 根据您的数据量,这可能是可能的并且速度很快(众所周知,Snowflake 每小时能够加载多个 TB)。您可以使用
CREATE TABLE LIKE
、COPY
和 SWAP
的组合来进行交易。
- 仅识别和导出新行 - 不确定您的数据源是什么,但您也许可以做到
- 加载到 Snowflake 时,请勿插入现有行。您需要有一些方法来确定哪些行是相同的,例如ID 字段(或字段组合)。然后你可以
COPY
进入临时 table,然后使用 MERGE
合并 new/modified 行(请参阅文档了解各种可能的选项)
在这种情况下,使用 Snowflake MERGE 命令将 update/insert 行定位到 table。除此之外,您还可以浏览 Snowflake CDC 以仅加载之前和当前时刻之间的变化增量:https://docs.snowflake.net/manuals/user-guide/streams.html
有点晚了,但一种可能且更准确的解决方案是:
- 动态创建瞬态 table 并将每小时的过渡数据复制到此瞬态 tables。
- Merge into final table : 从步骤 1 中创建的瞬态 table,MERGE into final table 基于你的 PK。
这是维护快照 tables 与日志 tables 的典型案例。
要手动避免第 1 步,您还可以利用 SNOWPIPE.
目前,我们正在使用 Hadoop 和 Snowflake 来存储我们的数据。
该过程是使用 DISTCP 将 Hadoop ORC 文件复制到 Snowflake s3 位置,然后 运行 从 S3 复制到 Snowflake table。这会将 Hadoop ORC table 中的所有内容复制到 Snowflake table.
现在,我有一个新要求,其中我的 Hadoop table 是事务性的 table 并且现有条目每小时更新一次。如果我将 ORC 文件复制到 S3 和 运行 复制命令,它会将更多条目添加到现有的 table 而不会更新现有的 1s.
如何解决 Snowflake 中的这个问题?
通常使用三种策略来处理这样的事情:
- 定期重新加载所有内容 - 根据您的数据量,这可能是可能的并且速度很快(众所周知,Snowflake 每小时能够加载多个 TB)。您可以使用
CREATE TABLE LIKE
、COPY
和SWAP
的组合来进行交易。 - 仅识别和导出新行 - 不确定您的数据源是什么,但您也许可以做到
- 加载到 Snowflake 时,请勿插入现有行。您需要有一些方法来确定哪些行是相同的,例如ID 字段(或字段组合)。然后你可以
COPY
进入临时 table,然后使用MERGE
合并 new/modified 行(请参阅文档了解各种可能的选项)
在这种情况下,使用 Snowflake MERGE 命令将 update/insert 行定位到 table。除此之外,您还可以浏览 Snowflake CDC 以仅加载之前和当前时刻之间的变化增量:https://docs.snowflake.net/manuals/user-guide/streams.html
有点晚了,但一种可能且更准确的解决方案是:
- 动态创建瞬态 table 并将每小时的过渡数据复制到此瞬态 tables。
- Merge into final table : 从步骤 1 中创建的瞬态 table,MERGE into final table 基于你的 PK。
这是维护快照 tables 与日志 tables 的典型案例。 要手动避免第 1 步,您还可以利用 SNOWPIPE.