【问题标题】:In Azure Synapse, is it true that creating a temporary table is discouraged?在 Azure Synapse 中,是否确实不鼓励创建临时表?
【发布时间】:2022-02-22 03:14:05
【问题描述】:

我与一位同事进行了很好的讨论,他提到创建临时表会降低 Azure Synapse 中的性能,因为 Synapse 首先在主节点中创建临时表,然后将它们分发到子节点。这是真的吗?他建议我创建永久表而不是临时表。

【问题讨论】:

    标签: azure azure-synapse


    【解决方案1】:

    这是不正确的。临时表不一定通过控制节点汇集。假设您从分布在 ProductKey 上的表中进行选择,并将其加载到分布在 ProductKey 上的 #temp 表中。数据永远不会离开每个计算节点,因为它是与分布兼容的插入。

    另一方面,例如,如果您运行使用ROW_NUMBER 函数的查询,则必须在控制节点上进行计算,然后将数据发送回计算节点以存储在分布式临时表。但这仅在存在某些类型的函数和某些类型的查询时才会发生。这不是常态。如果您担心某个特定查询,请在其前面添加单词 EXPLAIN 并将解释计划 XML 粘贴到您的问题中,以便我们帮助您解释它。

    如果使用SELECT INTO 语句加载#temp 表,则无法指定表几何,因此它将是循环分布式列存储。通常这并不理想,因为压缩列存储需要额外的时间和内存,并且除非没有好的分发键,否则循环分发并不理想。通常,下一个使用轮询分布式临时表的查询只会重新洗牌,因此最好最初正确散列分布临时表。为此,请按照here 所述执行 CTAS 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 2019-08-22
      • 2020-04-05
      • 2023-02-14
      • 2021-03-01
      • 2020-12-27
      • 2023-03-13
      • 2015-06-14
      相关资源
      最近更新 更多