【问题标题】:SnowFlake Stored Procedure Multi ThreadingSnowFlake 存储过程多线程
【发布时间】:2020-06-12 11:24:05
【问题描述】:

作为 Snowflake 的新手,我试图了解如何编写基于 JavaScript 的存储过程 (SP) 以利用多线程/并行处理。 我的背景是 SQL Server 和编写 SP,利用并行度、工作线程、索引、列存储段消除等性能特性。

我开始习惯于设置存储和使用集群键、微分区和任何其他可用的性能功能,但我不明白 Snowflake SP 如何将给定的 SQL 语句分解为并行流。我正在努力寻找任何文件来解释内部运作。 我担心的是产生在一个线程上序列化所有内容并成为瓶颈的 SP。 我想知道我是否在应用正确的技术/需要不同的心态来开发 SP。 我希望我已经充分解释了我的担忧。本质上,我正在构建一个 PoC 以将本地 SQL Server DWH ETL 解决方案迁移到 Snowflake/Matillion ELT 解决方案,一方面是评估我需要的计算虚拟仓库大小。

【问题讨论】:

  • 您是希望 SP 并行执行多个 SQL 语句,还是只是想确保 SQL 语句本身是多线程的?如果是后者,那么 Snowflake 会为您处理,您无需担心。
  • 嗨,迈克,感谢您的回复。
  • 嗨,迈克,感谢您的回复。肯定对后者感兴趣。我想了解更多关于 Snowflake 是如何实现这一点的,而不仅仅是接受它。例如,必须有关于如何编写 SP、复杂程度 v 过度使用存储(临时存储)的最佳实践,其中,从 ETL 到 ELT 的角度来看,维护整个过程的控制(开发构架)。我有很多关于迁移、测试框架、CI/CD 管道的问题,现在很难从哪里开始。
  • 您可能需要联系 Snowflake 的销售代表。 Snowflake 的销售工程师可以为您的 POC 提供帮助,也有专业的服务可以进来教授最佳实践,甚至协助设计您的最终解决方案。
  • 听起来是个好建议,迈克。得看看荷包能不能松开。

标签: query-performance snowflake-cloud-data-platform java-stored-procedures


【解决方案1】:

无状态UDF默认并行运行,这是我在通过base64编码导入大量二进制数据时观察到的。

有状态 UDF 在数据上使用的 PARTION BY 和 ORDER BY 子句控制的日期并行运行。唯一要记住的技巧是始终强制初始化您的数据,因为 javascript 实例可以用于后续的 PARTITON BY 批次,因此不要依赖检查 undefined 来知道它是否是第一行。

【讨论】:

    猜你喜欢
    • 2022-06-18
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多