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

时间:2017-04-10 09:23:21

标签: azure merge u-sql delta

我有一个基本流,我有不同连续日期的多个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
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

Delta Stream 1:

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

Delta Stream 2:

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

2 个答案:

答案 0 :(得分:1)

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

实现这一目标通常有4个步骤。

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

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

  3. 构建合并视图 - 这是一个查询,它将基础数据与版本最大的ID上的增量数据相连接。现在,当您获得此视图时,这是所有最新记录。

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

  5. 这篇文章解释了如何使用Hive来实现这一目标。这个使用日期时间来识别最新记录。

    https://hortonworks.com/blog/four-step-strategy-incremental-updates-hive/

答案 1 :(得分:0)

我使用您的测试数据在15 15 * * * root /etc/scripts/cron.sh 中编写了一个示例。它采用上述方法,并根据您和某种数据组件所描述的唯一键获取最后一条记录。

我使用了这些文件:

有几个假设:

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

代码:

U-SQL

我的结果(符合您的预期结果:

My U-SQL Results

HTH