snowflake-task - 雪花数据管道问题 - 特别是流问题
问题描述
背景
我在我们的生产雪花数据库中实现了雪花数据管道(s3 日志文件 > SNS > 管道 > 阶段表 > 流 > 任务 > 存储 proc/UDF > 最终表)。
虽然我们的开发数据库中的工作规模较小,但考虑到试图流向它的数据量(6416006096 条记录和不断增长),生产管道似乎已经停止工作。
问题
经过到目前为止的一些调查,看起来 s3 log > SNS > pipe > stage table 没问题,但是我的事情被卡在了任务从流中检索记录的地方......流不是陈旧的。我花了很多时间阅读有关流的文档,但没有为我当前的问题找到任何帮助。
看起来流有太多数据要返回——当我尝试从流中获取限制为 10 的 count(*) 或 * 时,它在 8 分钟后没有返回(并且还在计数)......
即使我可以限制返回的数据,我也尝试过,一旦您从事务中的流中选择,即使您不想要所有更改(即使用 where 子句进行过滤),您也可能丢失所有更改...
问题
有没有办法让任何东西从流中返回而不重置它?
无论如何,是否可以在不丢失事务中所有更改的情况下对流中的结果进行分块?
流是否存在一些未记录的限制——我达到了吗?
忧虑
我不想关闭数据管道,这意味着我可能不得不从头开始,但我想如果我没有得到答案,我将不得不这样做(我也联系了支持,但还没有收到回复)。鉴于流和任务仍然只是预览版,我想这应该不足为奇,但有人告诉我,他们现在将是 Snowflake 的 GA。
解决方案
有没有办法让任何东西从流中返回而不重置它?
您应该能够从流中进行选择而无需重置它。只有在 DML 中使用它(例如:作为 select * from stream 插入 mytable)才会重置它。
无论如何,是否可以在不丢失事务中所有更改的情况下对流中的结果进行分块?
不,流不支持分块。
流是否存在一些未记录的限制——我达到了吗?
我认为没有未记录的限制,流本质上是表上的范围,因此如果基础表中有大量数据,扫描它可能需要一段时间。
其他一些考虑:
您是否使用了合适大小的仓库?如果流中有大量数据,并且包含更新、删除和插入的大量 DML,您可能需要重新考虑仓库大小。我相信 Snowflake 会进行一些分区级别的比较来协调添加和删除的数据。
您能否“收紧”从流中读取的频率,以便每次处理的数据更少?
根据您感兴趣的数据类型,Snowflake 提供仅附加流类型,仅显示添加的数据。这使得扫描速度更快。
推荐阅读
- php - 用于收集电子邮件的 HTML 表单不起作用
- python - 从 Django Rest Framework 中的 ManyToManyField 获取对象计数
- flutter - Flutter - 启动应用程序时如何删除第一个白屏?
- amazon-web-services - 使用 aws-cli 从命令行创建 Route53 记录
- java - 凌空获取响应返回 java.lang.String 类型的值无法转换为 JSONArray
- spring-boot - Azure DevOps 构建管道 - 基于特定 application.profile 构建 Spring Boot
- android - 如何在 Android Gradle 任务中注册生成的资源?
- javascript - 父状态更新时子组件的道具不更新
- kubernetes - istio 中是否允许交叉规则?应用它的策略是什么?
- javascript - 什么是“PHP”的运行时环境,例如“Javascript”的“Node.js”运行时环境,用于构建服务器端 Web 应用程序?