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 应该散列分布以获得更好的性能。

问题是:

我可以使用这些列之一作为分布列吗?任何一列都会有重复项,尽管它们都是 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 中引入约束:您不能删除分布列。

使用哈希分布列有两个原因:一个是为了防止数据在查询时跨分布移动,另一个是为了确保数据在您的分布中均匀分布,以确保所有工作人员都得到有效利用查询。通过非倾斜列进行哈希分布,即使不是唯一的,也可以帮助解决第二种情况。

但是,如果您确实想按主键进行分发,请考虑通过将复合主键的不同列散列在一起来创建复合主键。您可以通过散列键进行散列分布,如果您稍后需要更新该散列键,这也有望减少数据移动。