Azure Synapse - 增量数据加载
Azure Synapse - Incremental Data Load
我们使用 Azure 数据工厂 和 将数据从本地数据库服务器加载到 Azure Data Lake Storage Gen2 Databricks 将它们存储为 parquet 文件。每个 运行,我们只获取上次 运行 的新数据和修改后的数据,并使用 databricks merge[=30 UPSERT 到现有的镶木地板文件中=]声明。
现在我们正在尝试从 parquet 文件 Azure Synapse 中移动这些数据。理想情况下,我想这样做。
- 将增量加载数据读入外部table。 (CETAS 或 COPY
进入)
- 将以上用作分期table。
- 合并暂存 table 与生产 table。
问题是合并语句在 Azure Syanpse 中不可用。这是 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 删除并重新创建作品 table。将在小维度 tables 上正常工作,但我担心大事实 tables 具有 100 的数百万行索引。关于什么是对非常大的事实 table 进行增量加载的最佳方法的任何建议。谢谢!
直到正式支持SQL MERGE,更新目标tables 的推荐方法是在增量记录之间使用T SQL insert/update 命令和目标 table.
或者,您也可以使用映射数据流(在 ADF 中)来模拟 dimensional/fact 数据加载的 SCD 事务。
我们使用 Azure 数据工厂 和 将数据从本地数据库服务器加载到 Azure Data Lake Storage Gen2 Databricks 将它们存储为 parquet 文件。每个 运行,我们只获取上次 运行 的新数据和修改后的数据,并使用 databricks merge[=30 UPSERT 到现有的镶木地板文件中=]声明。
现在我们正在尝试从 parquet 文件 Azure Synapse 中移动这些数据。理想情况下,我想这样做。
- 将增量加载数据读入外部table。 (CETAS 或 COPY 进入)
- 将以上用作分期table。
- 合并暂存 table 与生产 table。
问题是合并语句在 Azure Syanpse 中不可用。这是 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 删除并重新创建作品 table。将在小维度 tables 上正常工作,但我担心大事实 tables 具有 100 的数百万行索引。关于什么是对非常大的事实 table 进行增量加载的最佳方法的任何建议。谢谢!
直到正式支持SQL MERGE,更新目标tables 的推荐方法是在增量记录之间使用T SQL insert/update 命令和目标 table.
或者,您也可以使用映射数据流(在 ADF 中)来模拟 dimensional/fact 数据加载的 SCD 事务。