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 语言?