表交换后雪花流不起作用

时间:2021-02-19 09:32:51

标签: snowflake-cloud-data-platform snowflake-stream

我正在使用我在论坛上找到的方法将数据加载到雪花 snowpipe -> load_table <-> 临时表 -> 最终表 我有一个任务树,用于检查 load_table 上的流,如果找到数据,则将 load_table 与 staging_table 交换 进一步的任务将 staging_table 处理到最终表中 然后 staging_table 被截断并与 load_table 交换回

这通常工作正常,但我看到的问题是我最终在 load_table 或 staging_table 上得到孤立记录,而 load_stream 为空。 现在,即使我手动将数据插入 load_table,流仍被标记为空,因此没有任务运行。

交换包含流的表时的预期行为是什么,是否支持上述行为或者我是否需要寻找替代方法? 目标是使用 snowpipe 将文件从 S3 加载到临时表中并将它们合并到最终表中,而无需管理不断增长的暂存表...

谢谢!

/编辑 做一些实验,似乎当表被交换时,流仍然监听“原始”表,因此将忽略雪管加载到“新”表的任何数据,即使新表已与原始表交换.. .

1 个答案:

答案 0 :(得分:1)

问题是,SHOW STREAMS 和 DESCRIBE STREAM 提供了错误的信息:

create or replace table test1 (v varchar);
create or replace table test2 (v1 varchar, v2 varchar);
create or replace stream test_stream_1 on table test1;
alter table test1 swap with test2;
show streams like 'test_stream_1';    

+---------------+------------------------+
|     name      |       table_name       |
+---------------+------------------------+
| TEST_STREAM_1 | GOKHAN_DB.PUBLIC.TEST1 |
+---------------+------------------------+

交换操作后应该指向GOKHAN_DB.PUBLIC.TEST2!我建议您提交支持案例。

好消息是,get_ddl 返回了正确的结果:

select get_ddl('stream','test_stream_1');

+--------------------------------------------------------+
|           GET_DDL('STREAM','TEST_STREAM_1')            |
+--------------------------------------------------------+
| create or replace stream TEST_STREAM_1 on table TEST2; |
+--------------------------------------------------------+
相关问题