【问题标题】:Delta Processing (Parallel execution issue)增量处理(并行执行问题)
【发布时间】:2018-02-24 03:50:14
【问题描述】:

场景:

我们有“employees_final”ADLA 目录/表格。

来自不同位置的用户将通过 ADF 调用 U-SQL 将员工数据加载到“employees_final”ADLA 目录/表“并行”中。

当用户加载数据时,它首先进入暂存表(employees_staging)。如果现有记录有更新,那么我们将在临时表(employees_staging)中存储两个版本的数据。下一步是,我们需要有“employees_final”表,其中包含仅最新版本的记录。

为了创建最终表,我们正在加入暂存表和最终表以查找插入/更新员工并将现有记录与新记录和 RECREATE 最终表相结合。

注意:由于没有 DELETE 选项,我们正在缓存现有记录并附加新/更新记录。

这种方法的缺点是,当用户并行运行ADF时,它会尝试更新SAME employees_final表,并且有可能DATA由于 TRUNCATE/RECREATE 表方法而丢失

我们有更好的方法来处理 PARALLEL 场景吗?

【问题讨论】:

    标签: azure-data-lake u-sql


    【解决方案1】:

    我不确定我是否完全明白你的问题。但首先是一些关于 ADLA/U-SQL(以及许多其他非事务性大数据系统)中并发更新的通用 cmets:

    1. ADLA/U-SQL 旨在提供与已提交读快照隔离 (RCSI) 等效的行为,允许多个读取器和 1 个并发写入器。当前存在存储级别限制,即使在这种情况下也可能导致作业失败,但您不应丢失数据。

    2. 同一对象上的多个破坏性写入器(例如截断)通常会导致其中一个写入器失败(目前是第二个写入器)。

    3. 您应该能够在同一个对象上并行进行多个附加(例如,多个INSERT 到同一个表中)。但请注意:不要进行单行插入,因为每次插入都会创建一个具有严重性能和规模问题的表片段文件。

    因此,考虑到这些点,如果您有一个在其中插入增量的临时表,我认为没有问题,但您需要一个工作来合并回主表。特别是如果您想重新创建它以处理更新和删除并防止它过度碎片化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2017-12-18
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多