【发布时间】:2022-02-22 03:14:05
【问题描述】:
我与一位同事进行了很好的讨论,他提到创建临时表会降低 Azure Synapse 中的性能,因为 Synapse 首先在主节点中创建临时表,然后将它们分发到子节点。这是真的吗?他建议我创建永久表而不是临时表。
【问题讨论】:
标签: azure azure-synapse
我与一位同事进行了很好的讨论,他提到创建临时表会降低 Azure Synapse 中的性能,因为 Synapse 首先在主节点中创建临时表,然后将它们分发到子节点。这是真的吗?他建议我创建永久表而不是临时表。
【问题讨论】:
标签: azure azure-synapse
这是不正确的。临时表不一定通过控制节点汇集。假设您从分布在 ProductKey 上的表中进行选择,并将其加载到分布在 ProductKey 上的 #temp 表中。数据永远不会离开每个计算节点,因为它是与分布兼容的插入。
另一方面,例如,如果您运行使用ROW_NUMBER 函数的查询,则必须在控制节点上进行计算,然后将数据发送回计算节点以存储在分布式临时表。但这仅在存在某些类型的函数和某些类型的查询时才会发生。这不是常态。如果您担心某个特定查询,请在其前面添加单词 EXPLAIN 并将解释计划 XML 粘贴到您的问题中,以便我们帮助您解释它。
如果使用SELECT INTO 语句加载#temp 表,则无法指定表几何,因此它将是循环分布式列存储。通常这并不理想,因为压缩列存储需要额外的时间和内存,并且除非没有好的分发键,否则循环分发并不理想。通常,下一个使用轮询分布式临时表的查询只会重新洗牌,因此最好最初正确散列分布临时表。为此,请按照here 所述执行 CTAS 语句。
【讨论】: