【问题标题】:snowflake sproc vs standalone sql雪花存储过程与独立 sql
【发布时间】:2019-12-03 16:27:50
【问题描述】:

我正在考虑为我们的 BI 目的创建非规范化表。

在从多个表创建业务逻辑时,我注意到当使用如下合并语句批量更新非规范化表(具有多个业务逻辑 SQL 的存储过程)时,查询性能更好。

eg: sproc 包含多个 SQL 的like

  1. 合并 denormalized_data(选择 businesslogic1)
  2. 合并 denormalized_data(选择 businesslogic2)
    等等

将业务逻辑包含在庞大的 SQL 中还是将其划分以便每个查询处理更少的行数更好?

如果我使用 sproc 会有任何开销吗?

【问题讨论】:

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


    【解决方案1】:

    说的很笼统。 Snowflake 已针对大批量工作进行了优化。例如,我遇到过插入 1 条记录所需的时间与插入 100,000 条记录所需的时间一样长的情况。所以插入 1 条记录 100,000 次会慢很多。

    肯定会有一些限制。应拆分 1TB 批次。而且您的里程可能会因方式/时间/等而异。您正在更新表格。但总的来说,您会发现批处理的性能更高。

    我所知道的过程中唯一真正的开销与将数据类型从 SQL 转换为 Javascript 并再次转换回来有关,然后是您必须如何管理输出。在大多数情况下,这并不重要。

    【讨论】:

    • 感谢 David 的回复。我们的表有 400 列。实际上我正在为每个合并语句加载 100 列(50 M 行)以分离业务功能。
    • 大卫是正确的。一次性为所有列添加业务逻辑要好得多。每次运行 MERGE 语句时,都会重新创建包含完整数据行的微分区。通过将 MERGE 语句分解为多个部分,您将多次重建相同的微分区。也就是说,您还应该考虑一个更大的仓库来一次性完成 400 列,因为可能需要大量的内存/cpu。
    • 谢谢 Mike。我们的业务逻辑很复杂,当所有内容都包含在 1 个大 SQL 中时,查询需要更长的时间来运行。是否将数据合并到临时表并在最后插入主表避免重新创建微分区?
    • 每当您在 Snowflake 中创建或更改数据时,您都会编写新的微分区。
    猜你喜欢
    • 2021-10-01
    • 2021-06-22
    • 1970-01-01
    • 2022-10-15
    • 2021-02-13
    • 2021-08-25
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多