如何在没有 DML 的情况下提前雪花流的偏移量?

sni*_*ack 4 snowflake-cloud-data-platform

雪花流真的很酷,但我似乎不知道如何将它们应用到我的用例中。我有一个外部进程,我想用它来检测表中行的更改,并通知其他消费者发生了这种情况。有多种方法可以做到这一点,但流的好处是它们可以跟踪上次被询问的时间,这将提供一种干净的方法来跟踪偏移量并防止重复或间隙。例如,使用显式时间旅行的替代方案需要在外部跟踪上次运行查询的时间,包括考虑 Snowflake 和进程之间的时钟偏差。

但是,如果将其中的数据推送到另一个表,则偏移量似乎只会向上移动。意思是,这会改变偏移量:

insert into other_table select * from my_stream
Run Code Online (Sandbox Code Playgroud)

但这并没有:

select * from my_stream
Run Code Online (Sandbox Code Playgroud)

就我而言,我不需要另一个表中的数据。我可以插入临时表或其他东西来产生推进偏移量的副作用,但这看起来既浪费又混乱。我还缺少其他选择吗?有什么方法可以“冲击”流吗?

Gre*_*lik 5

您可以使用不选择任何行的 where 子句。它仍然会消耗流。

insert into other_table select * from my_stream where false;
Run Code Online (Sandbox Code Playgroud)

如果您永远不会使用流中的行,只是用它来检测自上次消费点以来何时发生更改,您也可以考虑替换流。

create or replace stream my_stream on table my_table;
Run Code Online (Sandbox Code Playgroud)

这将允许您检查旧流上的更改,并在旧流报告更改行时执行任何需要发生的操作时从新流开始。