Azure Synapse 专用池,在对具有不同分布的 2 个表进行联接时,Synapse 使用以下语法创建临时表(执行计划中的随机步骤):
CREATE TABLE [qtabledb].[dbo].[TEMP_ID_79718]
(
[...] DATE NOT NULL,
[...] INT NOT NULL,
...
) WITH(DISTRIBUTED_MOVE_FILE='');
我在WITH(DISTRIBUTED_MOVE_FILE='')上没有找到任何东西,它到底做了什么?
WITH(DISTRIBUTED_MOVE_FILE='')
子句用于指定用于存储在节点之间移动的数据的文件的名称。
当对具有不同分布的两个表进行联接时,该文件用于在节点之间移动数据。
DISTRIBUTED_MOVE_FILE
选项用于指定用于存储在节点之间移动的数据的文件的名称。
'' 值用于指定未指定文件名。
SQL DW 会根据目标表的分布列将每一行移动到正确的计算节点。 在此操作期间不会复制已存储在正确计算节点上的行。
数据移动将在计划中发生:
<dsql_operation operation_type="SHUFFLE_MOVE">
。
这意味着 SHUFFLE_MOVE
- 重新分配分布式表。
重新分布表具有与原始分布表不同的分布列。
这可能用于运行不兼容的联接或不兼容的聚合时。
您可以参考示例不包括我的分发密钥
其他参考: SHUFFLE_MOVE