1

背景

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

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

问题

经过到目前为止的一些调查,看起来 s3 log > SNS > pipe > stage table 没问题,但是我的事情被卡在了任务从流中检索记录的地方......流不是陈旧的。我花了很多时间阅读有关流的文档,但没有为我当前的问题找到任何帮助。

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

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

问题

有没有办法让任何东西从流中返回而不重置它?

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

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

忧虑

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

4

1 回答 1

2

有没有办法让任何东西从流中返回而不重置它?

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

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

不,流不支持分块。

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

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

其他一些考虑:

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

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

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

于 2020-03-20T18:56:16.047 回答