【发布时间】:2021-11-26 00:30:11
【问题描述】:
我有一个文件,其中包含使用 Azure 映射数据流从 2 个不同来源集成的数据并加载到 ADLS2 数据湖容器/文件夹中,例如:- /staging/EDW/Current/products.parquet 文件。
我现在需要使用 Azure 映射数据流在暂存中处理此文件,并使用 SCD type2 方法将其加载到相应的维度表中以维护历史记录。
但是,我想尝试仅使用 Azure 映射数据流在 Azure Data Lake 中将此维度表创建和处理为“增量”表。但是,由于 SCD 类型 2 需要源查找来检查是否存在任何现有记录/行,以及是否插入全部或更改的记录是否进行更新等(假设在第一次加载期间)。
为此,我需要首先在 Azure 数据湖文件夹中创建一个默认/空白“Delta”表,例如:- /curated/Delta/Dimension/Products/。就像我们在 Azure SQL DW(专用池)中所做的那样,我们可以首先创建一个只有架构/结构而没有行的空白 dbo.dim_products 表。
我正在尝试通过利用和评估使用 Azure 映射数据流的 Delta Lake 和 Azure Synapse Serverless SQL 池的最佳功能来实现 DataLake-House 架构实现 - 以提高性能、节省成本、易于开发(低代码) & 理解。但是,与此同时,此时希望避免使用逻辑数据仓库 (LDW) 类型的架构实现。
为此,尝试在内置的 Azure Synapse Serverless SQL 池下创建一个新数据库,定义数据源、格式和一个空白的增量表/模式结构(没有任何行);但没有运气。
create database delta_dwh;
create external data source deltalakestorage
with ( location = 'https://aaaaaaaa.dfs.core.windows.net/curated/Delta/' );
create external file format deltalakeformat
with (format_type = delta);
drop external table products;
create external table dbo.products
(
product_skey int,
product_id int,
product_name nvarchar(max),
product_category nvarchar(max),
product_price decimal (38,18),
valid_from date,
valid_to date,
is_active char(1)
)
with
(
location='https://aaaaaaaa.dfs.core.windows.net/curated/Delta/Dimensions/Products',
data_source = deltalakestorage,
file_format = deltalakeformat
);
但是,这会失败,因为 Delta 表/文件需要存在 _delta_log/*.json 文件夹/文件来维护事务日志。这意味着,我必须首先以 Delta 格式将少量(虚拟)行写入所述目标文件夹,然后只有我可以读取它并执行用于 SCD 类型 2 实现的以下查询:
select isnull(max(product_skey), 0)
FROM OPENROWSET(
BULK 'https://aaaaaaaa.dfs.core.windows.net/curated/Delta/Dimensions/Products/*.parquet',
FORMAT = 'DELTA') as rows
有什么想法、意见、建议吗??
谢谢!
【问题讨论】:
-
你的问题很有趣。但是你想如何将数据保存在来自 adf 的 delta 文件中?如果我没记错的话,你需要这个 databrick 集群。
-
数据将使用 Azure Mapping Data Flow 可视化转换界面保存,该界面在后台运行在“Spark”集群上,并允许“Delta”作为 Source 和 Sink 类型(内联)。然后将此 Azure 映射数据流用作/添加为 ADF 中的活动。
标签: azure-synapse delta-lake azure-data-lake-gen2 azure-data-flow scd2