我有一个文件,其中包含使用 Azure 映射数据流从 2 个不同来源集成的数据并加载到 ADLS2 数据湖容器/文件夹中,例如:- /staging/EDW/Current/products.parquet 文件。
我现在需要使用 Azure 映射数据流在暂存中处理此文件,并使用 SCD type2 方法将其加载到相应的维度表中以维护历史记录。
但是,我想尝试仅使用 Azure 映射数据流在 Azure Data Lake 中将此维度表创建和处理为“Delta”表。但是,由于 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
任何想法,意见,建议?
谢谢!