Synapse SQL:将临时表合并到主表和自动增量标识
Posted
技术标签:
【中文标题】Synapse SQL:将临时表合并到主表和自动增量标识【英文标题】:Synapse SQL: Merging staging table into primary table and auto-increment identity 【发布时间】:2021-12-11 03:20:23 【问题描述】:Azure Synapse 对主键 (https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-table-constraints) 有不同的方法,它不允许使用传统的标识列(例如,INT IDENTITY(1,1) NOT NULL PRIMARY KEY
)
我想使用合并语句来更新我拥有的表,但是使用 Synapse SQL,我不确定在合并新数据时如何获取自动增加的主键。考虑以下 MWE:
CREATE TABLE [table1]
(
[primaryKey] INT IDENTITY(1,1) NOT NULL,
[id] INT,
[name] VARCHAR(25)
)
WITH ( CLUSTERED COLUMNSTORE INDEX,
DISTRIBUTION = HASH([id])
);
CREATE TABLE [table1_staging]
(
[id] INT,
[name] VARCHAR(25)
);
INSERT INTO [table1_staging]
(id, name) VALUES (1, 'john');
-- run merge
MERGE [table1] AS TARGET
USING [table1_staging] AS SOURCE
-- match on ID
ON (TARGET.id = SOURCE.id)
-- when no match; insert
WHEN NOT MATCHED BY TARGET
THEN INSERT ([id], [name]) VALUES(SOURCE.[id], SOURCE.[name]);
-- cannot update identity column
创建主键 (INT PRIMARY KEY NONCLUSTERED NOT ENFORCED
) 的推荐方法不会自动递增,由于不允许 NULL,因此会导致合并失败。
【问题讨论】:
“无法更新标识列”?您的声明从未更新身份列,而且我从未遇到过您想要的情况。您需要更详细地解释。 你能发布你得到的错误吗?我现在不想为 Synapse 实例付费。 【参考方案1】:你能不能试着打开它。
SET IDENTITY_INSERT table1 ON;
【讨论】:
【参考方案2】:来自 MSFT,不支持:https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=azure-sqldw-latest&preserve-view=true#remarks
During the preview, MERGE…WHEN NOT MATCHED INSERT is not supported for tables with IDENTITY columns.
【讨论】:
以上是关于Synapse SQL:将临时表合并到主表和自动增量标识的主要内容,如果未能解决你的问题,请参考以下文章