4.5. 数据位于集合中的集成行为


有时,连接会返回一个集合,其中包含了相同类型的多个值。当连接返回集合时,流可以通过多种方式在集合上操作,包括:

  • 为集合执行一次每个步骤。
  • 为集合中的每个元素执行一次每个步骤。
  • 为集合执行一次这些步骤,并为集合中的每个元素执行一次其他步骤。

要决定如何对流中的集合进行操作,您需要了解流连接到哪些应用程序,以及是否可以处理集合,以及您希望流程完成的内容。然后,您可以使用以下主题中的信息向处理集合的流中添加步骤:

4.5.1. 关于数据类型和集合

data mapper 显示源字段和目标字段,您可以定义您需要的字段到字段映射。

在 data mapper 中,字段可以是:

  • 存储单个值的原语类型。原语类型示例包括 布尔值char字节int浮点 数和 双倍。原语类型不可扩展,因为它是一个字段。
  • 复杂的 类型,由多个不同类型组成的字段组成。您可以在设计时定义复杂类型的子字段。在数据映射器中,一种复杂的类型可以扩展,以便您可以查看其子字段。

每种字段类型(专用和复杂)也可以是一个集合。集合是一个可以有多个值的单个字段。集合中的项目数量在运行时决定。在设计时,在数据映射程序中,集合由 the Collection icon 表示。数据映射程序界面中是否可扩展集合是否由其类型决定。当集合是原语类型时,它不可扩展。当集合是复杂的类型时,数据映射程序可以被扩展来显示集合的子字段。您可以从/映射到每个字段。

以下是一些示例:

  • ID 是原语类型字段(int)。在运行时,员工只能有一个 ID。例如: ID=823。因此,ID 是非集合的原语类型。在数据映射器中,ID 不可扩展。
  • email 是原语类型字段(字符串)。在运行时,员工可以具有多个 电子邮件 值。例如: email<0>=aslan@home.comemail<1>=aslan@business.com。因此,电子邮件 是一个原语类型,也是集合。数据映射程序使用 the Collection icon 表示 电子邮件 字段是一个集合,但 电子邮件 无法扩展,因为它是一个原语类型(没有子字段)。
  • staff 是复杂的对象字段,具有多个子字段,包括 ID电子邮件。在运行时,员工 也是一个集合,因为公司有许多员工。
    在设计时,数据映射程序使用 the Collection icon 来表示 员工 是一个集合。employees 字段可扩展,因为它是包含子字段的复杂类型。

4.5.2. 关于处理集合

流处理集合的最简单方法是使用 data mapper 将源集合中的字段映射到目标集合中字段。对于很多流,这是需要的。例如,流可能会从数据库中获取一系列员工记录,然后将这些记录插入到电子表格中。在数据库连接和 Google Sheets 连接之间,数据映射程序步骤将数据库字段映射到 Google Sheets 字段。由于源和目标都是集合,因此当 Fuse Online 执行流时,它会同时调用 Google Sheets 连接。在该调用中,Fuse Online 会迭代记录并正确地填充电子表格。

在一些流程中,您可能需要将集合分成单独的对象。例如,有一个流,它连接到数据库,并获得了在一定日期之前丢失分配时间的员工集合。然后,流程需要向每个员工发送电子邮件通知。在这个流程中,您可以在数据库连接后添加 split 步骤。然后,您将添加一个数据映射程序步骤,将员工记录的源字段映射到发送邮件的 Gmail 连接中的 target 字段。当 Fuse Online 执行流时,它会对每个员工执行 data mapper 步骤和 Gmail 连接。

有时,在流中分离集合后,在流中对集合执行一些步骤后,每个元素都会再次在集合上操作。考虑上一段落中的示例。假设在 Gmail 连接后向每个员工发送一条信息,您希望添加一个向电子表格通知的员工列表。在这种情况下,在 Gmail 连接后,添加一个聚合步骤来创建员工名称的集合。然后添加一个数据映射程序,将源集合中的字段映射到目标 Google Sheets 连接中的字段。当 Fuse Online 执行流时,会为集合执行新的 data mapper 步骤和 Google Sheets 连接。

这些是在流中处理集合的最常见场景。然而,更复杂的处理也成为可能。例如,当集合中的元素本身是集合时,您可以在其他分离和聚合步骤中嵌套分割和聚合步骤。

4.5.3. 使用 data mapper 处理集合

在流中,当步骤输出集合以及流中的后续连接时,需要一个集合作为输入,您可以使用 datamapper 指定如何处理集合的方式。

当步骤输出集合时,流视觉化会在步骤的详细信息中显示 Collection。例如:

Data Type: SQL Result (Collection)

在提供集合并在需要映射的步骤之前,添加数据映射步骤。在此数据映射程序步骤中的流程需要完全取决于流程中的其它步骤。下图显示了从源集合字段到目标集合字段的映射:

mapping collection

在源和目标面板中,数据映射器会显示 the Collection icon 来表示集合。

当集合是复杂的类型时,数据映射程序会显示集合的子字段。您可以从/映射到每个字段。

当源字段嵌套到多个集合中时,您可以将其映射到满足这些状况的目标字段:

  • target 字段嵌套在与 source 字段相同的集合数量中。例如,允许这些映射:

    • /A<>/B<>/C /D<>/E<>/F
    • /A<>/B<>/C /G<>/H/I<>/J
  • target 字段只嵌套在一个集合中。例如,允许这个映射:

    /A<>/B<>/C /K<>/L

    在这种情况下,数据映射程序使用深度第一算法来迭代源中的所有值。因此,数据映射程序会将源值放在单个目标集合中。

不允许使用以下映射:

/A<>/B<>/C cannot-map-to /M<>/N/O<>/P<>/Q

当 Fuse Online 执行流时,它会迭代源集合元素来填充目标集合元素。如果您将一个或多个源集合字段映射到目标集合或目标集合字段,则目标集合元素仅包含映射字段的值。

如果您将源集合中的源集合或字段映射到不在集合中的目标字段,那么当 Fuse Online 执行流时,它将仅从源集合中的最后一个元素分配值。集合中的所有其他元素在此映射步骤中会被忽略。但是,任何后续映射步骤都可以访问源集合中的所有元素。

当连接返回 JSON 或 Java 文档中定义的集合时,数据映射程序通常可以将源文档作为集合处理。

4.5.4. 添加分割步骤

在执行流期间,当连接返回一组对象时,Fuse Online 对集合执行一次后续步骤。如果要为集合中的每个对象执行一次后续步骤,请添加 split 步骤。例如,Google Sheets 连接会返回一行对象的集合。要对每个行执行一次后续步骤,请在 Google Sheets 连接后添加一个拆分步骤。

确定到 split 步骤的输入始终是一个集合。如果分割步骤获取一个不是集合类型的源文档,步骤会在每个空间上分离输入。例如,Fuse Online 将"Hello world!"输入分成两个元素:"Hello"和"world!",并将这些两个元素传递到网络流中的下一步。特别是,XML 数据不是集合类型。

先决条件

  • 正在创建或编辑一个流。
  • 流已具有所需的所有连接。
  • 在流视觉化中,获取源数据的连接表示数据是一个 (Collection)

流程

  1. 在流视觉化中,点您要添加分割步骤的位置 PlusSignToAddStepOrConnection
  2. Split。此步骤不需要任何配置。
  3. 点击 Next

附加信息

通常,要在添加数据映射程序步骤前添加任何分割步骤和聚合步骤。这是因为数据是集合还是单个对象是否影响映射。如果您添加一个数据映射程序,然后添加分割步骤,您通常需要重做映射。同样,如果您删除了分割或聚合步骤,则需要恢复任何映射。

4.5.5. 添加聚合步骤

在流中,添加一个聚合步骤,您要使用 Fuse Online 从单个对象创建集合。在执行聚合步骤后,Fuse Online 对每个对象执行一次后续步骤,而对集合执行一次后续步骤。

在决定是否将聚合步骤添加到流时,请考虑流中的连接。对于每个后续连接,Fuse Online 会为每个流程数据中的每个元素连接一次应用程序。对于某些连接,最好一次连接一次,而不是多次连接。

先决条件

  • 正在创建或编辑一个流。
  • 流已具有所需的所有连接。
  • 上一步将集合分成单个对象。

流程

  1. 在流视觉化中,您要在流中添加聚合步骤,点 PlusSignToAddStepOrConnection
  2. Aggregate。此步骤不需要任何配置。
  3. 点击 Next

附加信息

通常,要在添加数据映射程序步骤前添加任何分割和聚合步骤。这是因为数据是集合还是单个对象是否影响映射。如果您添加一个数据映射程序,然后添加一个聚合步骤,通常需要重做映射。同样,如果您删除了聚合步骤,则需要恢复任何映射。

4.5.6. 在流中处理集合示例

此简单集成从随 Fuse Online 提供的样本数据库中获取一组任务。流将集合分成单个任务对象,然后过滤这些对象来查找已完成的任务。然后,流会在集合中聚合完成的任务,将该集合中的字段映射到电子表格中的字段,并通过向电子表格添加完成的任务列表来完成。

以下流程提供了创建此简单集成的说明。

先决条件

  • 您创建了 Google Sheets 连接。
  • 在 Google Sheets 连接访问的帐户中,有一个用于接收数据库记录的电子表格。

流程

  1. Create Integration
  2. 添加启动连接:

    1. Choose a connection 页面上,单击 PostgresDB
    2. 在 Choose a action 页面上,选择 Periodic SQL Invocation
    3. SQL 语句 字段中,输入 选择 * from todo,然后单击 Next

    此连接返回一组任务对象。

  3. 添加完成连接:

    1. Choose a connection 页面中,点 Google Sheets 连接。
    2. Choose a action 页面中,选择 Append values to asheet
    3. SpreadsheetId 字段中输入电子表格的 ID,将任务列表添加到其中。
    4. Range 字段中,输入 A:B 作为您要附加值的目标列。第一列 A 用于任务 ID。第二列 B 用于任务名称。
    5. 接受 Major DimensionValue Input Option 的默认值,然后单击 Next

    Google Sheets 连接通过将集合中的每个元素添加到电子表格,从而完成网络流。

  4. 在流中添加分割步骤:

    1. 在流视觉化中,点加号。
    2. Split

    在流程执行分割步骤后,结果是一组单独的任务对象。Fuse Online 为每个任务对象执行一次流程中的后续步骤。

  5. 在流中添加过滤器步骤:

    1. 在流视觉化中,在分割步骤后点加号。
    2. Basic Filter 并配置过滤器:

      1. 单击第一个字段中的,然后选择包含您要评估数据的字段名称。
      2. 在第二个字段中,选择 等于 completed 字段值必须满足的条件。
      3. 在第三个字段中,将 1 指定为必须在 completed 字段中的值。1 表示任务已完成。
    3. 点击 Next

    在执行过程中,流程为每个任务对象执行过滤器步骤一次。其结果是一组单独的完成的任务对象。

  6. 在流中添加聚合步骤:

    1. 在流视觉化中,在过滤器步骤后点加号。
    2. Aggregate

    现在,结果集包含一个集合,其中包含每个完成的任务的一个元素。

  7. 在流中添加数据映射步骤:

    1. 在流视觉化中,在聚合步骤后点加号。
    2. Data Mapper,将 SQL 结果源集中的以下字段映射到 Google Sheets 目标集合:

      • IDA
      • 任务B
    3. Done
  8. 单击 Publish

结果

当集成运行时,它会每分钟从示例数据库获取任务,然后将完成的任务添加到电子表格中的第一个表中。该集成将任务 ID 映射到第一列 A,它会将任务名称映射到第二列 B

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat