0

我有一个文件,其中包含使用 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

任何想法,意见,建议?

谢谢!

4

1 回答 1

0

您可以尝试创建初始 /dummy data_flow + pipiline 来创建这个空的增量文件。

这只是简单的解决方法。

  1. 使用您的示例表数据创建 CSV。
  2. 创建名称为 =initDelta 的数据流
  3. 将此 CSV 用作数据流中的源
  4. 在投影面板中设置正确的数据类型。
  5. 在源之后添加过滤并设置虚拟过滤器 1=2 等。
  6. 添加具有增量输出的接收器。
  7. 将您的 initDelta 数据流放入虚拟管道并运行它。
  8. 应该创建 delta 的文件夹结构。

您提到您的初始数据在 parque 文件中。你可以使用这个文件。表的模式(列和数据类型)将从文件中导入。过滤掉所有行并将结果保存为增量。

我认为它应该可以工作,或者我错过了您的问题中的某些内容

于 2021-10-07T21:01:57.453 回答