雪花数据管道问题 - 特别是流问题

Snowflake Data Pipeline problems - in particular stream issue

背景

我在我们的生产雪花中实现了雪花数据管道(s3 日志文件 > SNS > 管道 > 阶段 table > 流 > 任务 > 存储 proc/UDF > 最终 table)数据库。

虽然我们的开发数据库中的工作规模较小,但考虑到试图流出的数据量(6416006096 条记录并且还在增长),生产管道似乎已停止工作。

问题

到目前为止,经过一些调查,看起来 s3 log > SNS > pipe > stage table 没问题,但我的东西卡在了任务从流中检索记录的地方......流不是陈旧的.我已经花了很多时间 reading the docs on streams,但没有找到对我当前问题的任何帮助。

看起来流中的数据太多 return -- 当我尝试从流中获取限制为 10 的计数 (*) 或 * 时,它不会 returning 8 分钟(还在增加)...

即使我可以限制数据 returned,我已经试验过,一旦你从事务中的流中 select,你可能会丢失所有更改,即使你不想要它们全部(即使用 where 子句进行过滤)...

问题

有没有什么方法可以在不重置的情况下从流中获取 return 的任何内容?

有没有办法在不丢失事务中所有更改的情况下将流中的结果分块?

流是否有一些未记录的限制——我达到了吗?

关注

我不想关闭数据管道 bc 这意味着我可能必须重新开始,但我想如果我没有得到答案我将不得不这样做(我也联系了支持但尚未收到回复).鉴于流和任务仍然只是预览,我想这应该不足为奇,但我被告知它们现在将成为 Snowflake 的 GA。

有什么方法可以在不重置的情况下从流中获取 return 的任何内容吗?

您应该可以 select 从流中退出而无需重置它。仅在 DML 中使用它(例如:作为 select * 从流插入到我的 table 中)将重置它。

是否可以在不丢失事务内所有更改的情况下分块流中的结果?

不,流不支持分块。

流是否有一些未记录的限制——我达到了吗?

我认为没有未记录的限制,流本质上是 table 上的范围,因此如果底层 table 中有大量数据,扫描它可能需要一段时间。

其他一些注意事项:

  • 您使用的仓库大小合适吗?如果您在流中有大量数据,并且有大量由更新、删除和插入组成的 DML,您可能需要重新考虑您的仓库大小。我相信 Snowflake 会进行一些分区级别的比较以协调添加和删除的数据。

  • 你能"tighten"提高你从流中读取的频率,以便每次处理的数据更少吗?

  • 根据您感兴趣的数据类型,Snowflake 提供仅附加流类型,它仅显示添加的数据。这使扫描速度更快。