Azure Synapse Analytics:我可以使用非唯一列作为哈希分布式表中的哈希列吗?
Azure Synapse Analytics: Can I use non-unique column as hash column in hash distributed tables?
我正在使用专用 SQL 池(又名 Azure Synapse Analytics)。尝试优化一个事实 table 和 according to documentation FACT table 应该散列分布以获得更好的性能。
问题是:
- 我的事实 table 有一个复合主键。
- 您只能指定列作为哈希分布列。
我可以使用这些列之一作为分布列吗?任何一列都会有重复项,尽管它们都是 NOT NULL
.
CREATE TABLE myTable
(
[ITEM] [varchar](50) NOT NULL,
[LOC] [varchar](50) NOT NULL,
[MEASURE] [varchar](50) NOT NULL
CONSTRAINT [PK] PRIMARY KEY NONCLUSTERED
(
[LOC] ASC,
[ITEM] ASC
) NOT ENFORCED
)
WITH
(
DISTRIBUTION = HASH([ITEM]),
CLUSTERED COLUMNSTORE INDEX
)
是的,你可以!您可以使用任何列作为散列分布列,但请注意,这会在您的 table 中引入约束:您不能删除分布列。
使用哈希分布列有两个原因:一个是为了防止数据在查询时跨分布移动,另一个是为了确保数据在您的分布中均匀分布,以确保所有工作人员都得到有效利用查询。通过非倾斜列进行哈希分布,即使不是唯一的,也可以帮助解决第二种情况。
但是,如果您确实想按主键进行分发,请考虑通过将复合主键的不同列散列在一起来创建复合主键。您可以通过散列键进行散列分布,如果您稍后需要更新该散列键,这也有望减少数据移动。
我正在使用专用 SQL 池(又名 Azure Synapse Analytics)。尝试优化一个事实 table 和 according to documentation FACT table 应该散列分布以获得更好的性能。
问题是:
- 我的事实 table 有一个复合主键。
- 您只能指定列作为哈希分布列。
我可以使用这些列之一作为分布列吗?任何一列都会有重复项,尽管它们都是 NOT NULL
.
CREATE TABLE myTable
(
[ITEM] [varchar](50) NOT NULL,
[LOC] [varchar](50) NOT NULL,
[MEASURE] [varchar](50) NOT NULL
CONSTRAINT [PK] PRIMARY KEY NONCLUSTERED
(
[LOC] ASC,
[ITEM] ASC
) NOT ENFORCED
)
WITH
(
DISTRIBUTION = HASH([ITEM]),
CLUSTERED COLUMNSTORE INDEX
)
是的,你可以!您可以使用任何列作为散列分布列,但请注意,这会在您的 table 中引入约束:您不能删除分布列。
使用哈希分布列有两个原因:一个是为了防止数据在查询时跨分布移动,另一个是为了确保数据在您的分布中均匀分布,以确保所有工作人员都得到有效利用查询。通过非倾斜列进行哈希分布,即使不是唯一的,也可以帮助解决第二种情况。
但是,如果您确实想按主键进行分发,请考虑通过将复合主键的不同列散列在一起来创建复合主键。您可以通过散列键进行散列分布,如果您稍后需要更新该散列键,这也有望减少数据移动。