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

Posted

技术标签:

【中文标题】雪花数据管道问题 - 特别是流问题【英文标题】:Snowflake Data Pipeline problems - in particular stream issue 【发布时间】:2020-03-20 17:54:34 【问题描述】:

背景

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

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

问题

到目前为止,经过一些调查,看起来 s3 日志 > SNS > 管道 > 阶段表没问题,但我的事情被卡在任务从流中检索记录的地方......流不是陈旧的。我花了很多时间reading the docs on streams 并没有找到任何关于我当前问题的帮助。

看起来流有太多数据要返回——当我尝试从流中获取限制为 10 的 count(*) 或 * 时,它在 8 分钟后没有返回(并且还在计数)...

即使我可以限制返回的数据,我也尝试过,一旦您从事务中的流中进行选择,即使您不希望所有更改都丢失(即,使用 where 子句进行过滤) ...

问题

有什么方法可以在不重置的情况下从流中返回任何内容?

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

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

关注

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

【问题讨论】:

我个人使用流和任务几个月来一直没有问题。我发现您可以毫无问题地选择或不清除流。一旦您涉及 DML(例如在引用您的流时在表上运行 UPDATE、INSERT 或 DELETE),事务就会到位,这将清除您的流。你能增加你的仓库大小来选择流的内容吗?从 Stream 中选择可能是直接对 Snowflake 的一个很好的支持案例。 感谢您的回复 - 我有一项涉及 DML 的任务(在引用我希望分块但意识到我做不到的流时插入)。我通过将仓库大小增加到 4XL(呃)来选择工作。我有一个支持案例打开,但它可能只是数据大小的现实。 【参考方案1】:

有什么方法可以在不重置的情况下从流中返回任何内容?

您应该能够从流中进行选择而无需重置它。只有在 DML 中使用它(例如:作为 select * from stream 插入到 mytable 中)才会重置它。

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

不,流不支持分块。

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

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

其他一些注意事项:

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

您能否“收紧”从流中读取的频率,以便每次处理的数据更少?

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

【讨论】:

以上是关于雪花数据管道问题 - 特别是流问题的主要内容,如果未能解决你的问题,请参考以下文章

雪花任务条件:当表有数据时

雪花中的管道通知绑定失败

雪花返回错误“位置 <bucket name> 上的自动摄取管道数不能大于允许的限制:50000”

如何使用 sqitch 部署雪花数据库?

刷新数据共享视图时运行雪花任务

雪花验证功能未显示错误