Azure Synapse Analytics:我可以在散列分布式表中使用非唯一列作为散列列吗?

Posted

技术标签:

【中文标题】Azure Synapse Analytics:我可以在散列分布式表中使用非唯一列作为散列列吗?【英文标题】:Azure Synapse Analytics: Can I use non-unique column as hash column in hash distributed tables? 【发布时间】:2021-07-14 01:10:58 【问题描述】:

我正在使用专用 SQL 池(又名 Azure Synapse Analytics)。尝试优化事实表和according to documentation FACT 表应该散列分布以获得更好的性能。

问题是:

我的事实表有一个复合主键。 您只能将列指定为哈希分布列。

我可以使用其中一列作为分布列吗?任何一列都会有重复,尽管它们都是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
)

【问题讨论】:

【参考方案1】:

是的,你可以!您可以将任何列用作散列分布列,但请注意,这会在您的表中引入一个约束:您不能删除分布列。

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

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

【讨论】:

以上是关于Azure Synapse Analytics:我可以在散列分布式表中使用非唯一列作为散列列吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 Node.js 函数访问 Azure Synapse Analytics

SqlServerRegionDoesNotAllowProvisioning:无法创建 Azure Synapse Analytics 工作区

无法在 Azure Synapse Analytics 中创建表

Azure Synapse Analytics 是不是支持 R 语言?

Azure 数据资源管理器与 Azure Synapse Analytics(又名 SQL DW)

需要 '/n' 但被解析为新行 - Azure Synapse Analytics