如何解决Azure Synapse-增量数据加载
我们使用 Azure Data Factory 将数据从本地数据库服务器加载到 Azure Data Lake Storage Gen2 中,而 Databricks 将它们存储为实木复合地板文件。每次运行时,我们仅使用数据块 merge 语句将上次运行的新数据和修改过的数据以及UPSERT数据获取到现有的镶木文件中。
现在,我们正在尝试从实木复合地板文件 Azure Synapse 中移动此数据。理想情况下,我想这样做。
- 将增量加载数据读取到外部表中。 (CETAS或copY INTO)
- 在上方用作登台表。
- 将登台表与生产表合并。
问题是Azure Syanpse中没有merge语句。这是Microsoft suggests用于增量负载的解决方案
CREATE TABLE dbo.[DimProduct_upsert]
WITH
( disTRIBUTION = HASH([ProductKey]),CLUSTERED INDEX ([ProductKey])
)
AS
-- New rows and new versions of rows
SELECT s.[ProductKey],s.[EnglishProductName],s.[Color]
FROM dbo.[stg_DimProduct] AS s
UNION ALL
-- Keep rows that are not being touched
SELECT p.[ProductKey],p.[EnglishProductName],p.[Color]
FROM dbo.[DimProduct] AS p
WHERE NOT EXISTS
( SELECT *
FROM [dbo].[stg_DimProduct] s
WHERE s.[ProductKey] = p.[ProductKey]
)
;
RENAME OBJECT dbo.[DimProduct] TO [DimProduct_old];
RENAME OBJECT dbo.[DimProduct_upsert] TO [DimProduct];
使用CTAS基本删除并重新创建生产表。可以使用较小的维表很好地工作,但是我对具有数以百万计的带有索引的行的100个大型事实表感到不安。任何建议对于大型事实表进行增量加载的最佳方法是什么。谢谢!
解决方法
直到正式支持SQL MERGE为止,建议的更新目标表的方法是在增量记录和目标表之间使用T SQL插入/更新命令。
或者,您也可以使用“映射数据流”(在ADF中)来模拟SCD事务以进行维度/事实数据加载。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。