gpt4 book ai didi

azure - 如何有效地防止事实表中出现重复行?

转载 作者:行者123 更新时间:2023-12-02 10:50:39 25 4
gpt4 key购买 nike

我构建了一个数据工厂管道,它将数据从数据湖 ETL 到数据仓库中。根据我的尺寸,我选择了 SCD 1 型。

我的管道包含以下事件:

  1. [存储过程]清除暂存表;
  2. [存储过程]获取上次成功更新的时间戳;
  3. [U-SQL] 从 Azure Data Lake 中筛选的文件(自上次成功更新后修改过的文件)中提取维度数据,对其进行转换并以 csv 文件输出;
  4. [复制数据] 将 csv 加载到 SQL 数据仓库暂存维度表中;
  5. [存储过程]将暂存表中的数据合并到生产表中;
  6. [U-SQL] 从 Azure Data Lake 中的文件(自上次成功更新后修改过的文件)中提取事实数据,对其进行转换并以 csv 文件输出;
  7. [复制数据] 将 csv 加载到 SQL 数据仓库事实表中;
  8. [存储过程]更新成功更新的时间戳。

此管道的问题是,如果运行管道两次,我最终会在仓库中得到重复的事实条目。

问题

考虑到所有the unsupported features,如何有效地防止事实表中的重复行在 Azure SQL 数据仓库中?

更新

我阅读了另一条有关仓库索引(和统计数据)以及更新后必须如何重建的信息。

考虑到这一点,我想到的最简单的事情就是将与我在维度中使用的原则相同的原则应用于事实。我可以将所有新事实加载到临时表中,然后使用事实表上的索引来仅包含不存在的事实(这些事实现在无法更新)。

最佳答案

在 Azure SQL 数据仓库中进行提升...您的性能将显着提高,您的问题将会消失。

过滤后的文件中有多少行?如果是几百万到几千万,我想你可能可以避免数据湖阶段的过滤。 Polybase + SQL 的性能应该能够克服额外的数据量。

如果可以避免过滤器,请使用此逻辑并放弃 U-SQL 处理:

  • 将文件提取到具有适当哈希分布的暂存表
  • 取每一行的最新版本(适合SCD1)
  • 使用如下查询将阶段合并到事实:

BK = 业务关键列。 COLn = 非关键列

-- Get latest row for each business key to eliminate duplicates.

create table stage2 with (heap,distribution = hash(bk)) as
select bk,
col1,
col2,
row_number() over (partition by bk order by timestamp desc) rownum
from stage
where rownum = 1;

-- Merge the stage into a copy of the dimension

create table dimension_copy with (heap,distribution=replicate) as

select s.bk,
s.col1,
s.col2
from stage2 s
where not exists (
select 1
from schema.dimension d
where d.bk = s.bk)

union

select d.bk,
case when s.bk is null then d.col1 else s.col1 end,
case when s.bk is null then d.col2 else s.col2 end
from dimension d
left outer join stage2 s on s.bk = d.bk;

-- Switch the merged copy with the original

alter table dimension_copy switch to dimension with (truncate_target=on);

-- Force distribution of replicated table across nodes

select top 1 * from dimension;

关于azure - 如何有效地防止事实表中出现重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55577027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com