注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

在流式Pipeline Builder管道中合并数据

使用流式Pipeline Builder,您可以将流与批量数据集和其他流进行合并。由于流式处理具有低延迟的特性,合并的实现方式与标准批处理管道中的工作方式有所不同。本页面解释了合并的工作原理以及如何在管道中最佳利用它们。

将流与批量数据集合并

Foundry允许您以类似于在批处理Pipeline Builder管道中合并两个批量数据集的方式,将低延迟流与批量数据集进行合并。

完成以下步骤,在Pipeline Builder中将流与批量数据集合并:

  1. 将流和批量数据集添加到Pipeline Builder图中。

  2. 在批量数据集下,选择下拉菜单并将类型更改为Snapshot

    流类型选择的图片
  3. 选择您要合并的流。

  4. 选择Join,然后选择批量数据集作为合并的右侧。

  5. Join Type下,选择Left Lookup Join

  6. 输入匹配条件。

架构

对批量数据集的流式合并通过初始下载批量数据集并在流式集群中对其进行索引来实现低延迟查找。为了使合并具有低延迟,不允许在与流合并之前在同一Pipeline Builder管道中对批量数据集进行变换。

当新的事务写入到数据集时,批量数据集会更新。当一个新事务被添加到批量数据集时,一个后台进程将下载数据的新视图并将其转换为可查询的格式。一旦该过程完成,流将开始与批量数据集的新视图进行合并。

限制

在将批量数据集与流合并之前,不能对其进行变换。如果需要变换批量数据集,可以在上游的Pipeline Builder管道中进行。

请考虑以下流式合并的限制:

  • 在与批量数据集合并时,合并的左侧必须是流或具有“Stream”读取模式的批量数据集。
  • 如果与超过8-10GB数据的批量数据集合并,性能可能会下降。
  • 如果检测到新的追加事务,批量数据集最多每五分钟更新一次。
  • 与大型静态数据集合并可能会减慢集群启动时间。

将流与其他流合并

Foundry允许您将多个低延迟流进行合并,类似于在批处理Pipeline Builder管道中合并多个批量数据集。

完成以下步骤,在Pipeline Builder中将两个流合并:

  1. 将两个流添加到Pipeline Builder图中。
  2. 选择Join,然后选择两个流。
  3. Join Type下,选择Outer Caching Join
  4. 输入匹配条件。
  5. 指定缓存时间值和单位。缓存时间值和单位控制数据在用于合并两个流的缓存中存储的时间。

如果您希望进行左连接或右连接而不是外连接,可以在合并下游筛选出具有空值的记录。对于右连接,筛选右侧值为空的记录;对于左连接,筛选右侧值为空的记录。

架构

由于流是无限期运行的,并且新记录不断流入合并的两侧,因此两个流之间的合并是在每侧缓存的数据上操作,而不是在整个流上进行合并。

多个流之间的合并被限制在缓存的数据上操作,以防止无界状态增长,这将导致流式集群最终内存不足并崩溃。通过为合并的左侧和右侧缓存设置过期时间,存储合并记录所需的状态是有限的;这可以防止流式集群内存不足。

数据按每个键存储,并分布在任务管理器之间,以允许更大的合并。这意味着要与更大的流合并,可以增加每个任务管理器的内存或增加集群运行的任务管理器数量。

流的左侧记录将始终根据合并中指定的键列与右侧的最新记录进行合并。对于特定键,只会合并最新的记录。

限制

在将流与其他流合并时,请考虑以下限制:

  • 为了防止无界状态增长,合并的左侧和右侧都需要设置缓存过期时间。
  • 每个合并键的每侧只存储最新值。这意味着合并行为类似于“外”连接。
  • 如果记录在合并的另一侧有匹配项之前到达左侧或右侧流,将会发出一个具有空值的记录。