如何在Azure DataLake中合并基本流和多个增量结构流

如何在Azure DataLake中合并基本流和多个增量结构流,azure,merge,u-sql,delta,Azure,Merge,U Sql,Delta,我有一个基本流和多个不同连续日期的增量流。我想合并它们以得到最终的流。我如何在Azure Datalake中实现这一点。例如,假设这些是流。我需要合并这些流以得到最终的流。合并将用新值替换原始值。到目前为止,三角洲河流的数量已超过100条 基本流: 1022918 300.00 300.00 2 7 5 100 1022918 400.00 400.00 2 170 5 100 1022919 1000.00 1000.00 2 7 6 100 10229

我有一个基本流和多个不同连续日期的增量流。我想合并它们以得到最终的流。我如何在Azure Datalake中实现这一点。例如,假设这些是流。我需要合并这些流以得到最终的流。合并将用新值替换原始值。到目前为止,三角洲河流的数量已超过100条

基本流:

1022918 300.00  300.00  2   7   5   100
1022918 400.00  400.00  2   170 5   100
1022919 1000.00 1000.00 2   7   6   100
1022920 2000.00 2000.00 2   170 6   100
1022921 3000.00 3000.00 2   123 7   100
1022922 100.00  100.00  2   162 7   100
1022922 200.00  200.00  2   123 9   100
1022922 300.00  300.00  2   162 9   100
1022918 400.00  300.00  2   7   5   100
1022919 2000.00 1000.00 2   7   6   100
1022920 3000.00 2000.00 2   170 6   100
1022922 400.00  300.00  2   162 9   100
1022919 2500.00 1000.00 2   7   6   100
1022920 3500.00 2000.00 2   170 6   100
三角洲流1:

1022918 300.00  300.00  2   7   5   100
1022918 400.00  400.00  2   170 5   100
1022919 1000.00 1000.00 2   7   6   100
1022920 2000.00 2000.00 2   170 6   100
1022921 3000.00 3000.00 2   123 7   100
1022922 100.00  100.00  2   162 7   100
1022922 200.00  200.00  2   123 9   100
1022922 300.00  300.00  2   162 9   100
1022918 400.00  300.00  2   7   5   100
1022919 2000.00 1000.00 2   7   6   100
1022920 3000.00 2000.00 2   170 6   100
1022922 400.00  300.00  2   162 9   100
1022919 2500.00 1000.00 2   7   6   100
1022920 3500.00 2000.00 2   170 6   100
三角洲流2:

1022918 300.00  300.00  2   7   5   100
1022918 400.00  400.00  2   170 5   100
1022919 1000.00 1000.00 2   7   6   100
1022920 2000.00 2000.00 2   170 6   100
1022921 3000.00 3000.00 2   123 7   100
1022922 100.00  100.00  2   162 7   100
1022922 200.00  200.00  2   123 9   100
1022922 300.00  300.00  2   162 9   100
1022918 400.00  300.00  2   7   5   100
1022919 2000.00 1000.00 2   7   6   100
1022920 3000.00 2000.00 2   170 6   100
1022922 400.00  300.00  2   162 9   100
1022919 2500.00 1000.00 2   7   6   100
1022920 3500.00 2000.00 2   170 6   100
预期产出

1022918 400.00  300.00  2   7   5   100
1022918 400.00  400.00  2   170 5   100
1022919 2500.00 1000.00 2   7   6   100
1022920 3500.00 2000.00 2   170 6   100
1022921 3000.00 3000.00 2   123 7   100
1022922 100.00  100.00  2   162 7   100
1022922 200.00  200.00  2   123 9   100
1022922 400.00  300.00  2   162 9   100

Azure Data Lake Store是一个仅附加的文件系统。这意味着记录只能添加到文件的末尾。这与许多其他仅附加的系统没有多大区别。各种分析应用程序(如Azure Data Lake analytics和Hive)可用于逻辑合并这些基本流和增量流

实现这一点通常有4个步骤

  • 加载基础数据-这很简单。加载基本数据时,需要添加标识符。例如,基准日期或基准版本。对于本讨论,假设您使用版本号。假设基础数据是版本0

  • 在它们自己的表/文件中加载增量数据-加载它们时,还需要有一个标识符,该标识符可用于与基础数据进行比较,以确定最新的记录。假设我们还有版本号。因此,新记录将是一个更大的版本号1、2、3等等

  • 构建合并视图-这是一个将基础数据与ID上的增量数据连接起来的查询,其中版本最大。现在,当你看到这个视图时,这些都是最新的记录

  • 使用合并视图中的记录创建新的基础数据

  • 这里有一篇文章解释了如何使用Hive来实现这一点。这一个使用datetime来识别最新的记录


    我使用您的测试数据在
    U-SQL
    中创建了一个示例。它采用如上所述的方法,并根据您描述的唯一键和某种数据组件获取最后一条记录

    我使用了以下文件:

    有两个假设:

    • 文件以空格分隔
    • 文件名(或可能是文件夹)包含日期组件
    代码:

    我的结果(与您的预期结果相符:


    HTH

    您对这些文件的预期结果是什么?文件的唯一键是什么?用预期的输出更新了问题。主键是第1行+第5列+第6行。您太棒了:)嘿,刚刚尝试了您的解决方案。如何设置filedate。我想把它作为一个控制参数,这样我就可以为增量文件指定startdate,并且从startdate到currentDate的所有增量文件都合并到基本文件中。正如我在假设中提到的,此解决方案假设文件名或文件夹中包含一个日期。如果您查看我的示例文件,您将看到它们的文件名中有一个日期,例如delta_20170103.txt。这就是所谓的U-SQL中的a。