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

窗口内聚合

支持于: 流处理

在窗口内对数据执行指定的聚合,并根据提供的触发器发出输出。

变换类别: 聚合

声明的参数

  • 聚合表达式 - 要在每个窗口上评估的聚合表达式列表。
    List<Expression<AnyType>>
  • 数据集 - 要在其上执行聚合的数据集。
    Table
  • 窗口 - 定义元素应如何分组的窗口。
    Window
  • 非必填 累积模式 - 窗口的累积模式。确定窗口在触发器触发时是累积窗格还是丢弃窗格。
    Enum<Accumulating, Discarding>
  • 非必填 按列键控 - 用于按键分区输入的列。每个聚合将为每个不同的键值单独计算。
    Set<Column<AnyType>>
  • 非必填 触发器 - 定义何时执行聚合的触发器。
    Trigger

示例

滑动计数窗口

下表显示了所有后续示例中使用的输入数据流。最近流式传输的行在表中较高。

行顺序房间温度
5Monday厨房5
4Monday厨房4
3Monday厨房3
2Monday厨房2
1Monday厨房1

此外,每个示例都是下方显示的滑动窗口聚合节点的变体。

滑动窗口聚合节点示例

窗口滑动=1, 窗口计数=2, 可以在未满前发出=True

输出:

房间最后两次读数最后一次读数
厨房Monday[4, 5]5
厨房Monday[3, 4]4
厨房Monday[2, 3]3
厨房Monday[1, 2]2
厨房Monday[1]1

解释: 每次新行到达时,聚合会发出一个包含最后2行的组。聚合在窗口未满之前发出,因为每个窗口的行数始终是滑动(1)的倍数。

窗口滑动=1, 窗口计数=2, 可以在未满前发出=False

输出

房间最后两次读数最后一次读数
厨房Monday[4, 5]5
厨房Monday[3, 4]4
厨房Monday[2, 3]3
厨房Monday[1, 2]2

解释: 每次新行到达时,聚合会发出一个包含最后2行的组。聚合直到窗口满之前都不会发出。

窗口滑动=2, 窗口计数=2, 可以在未满前发出=True

输出

房间最后两次读数最后一次读数
厨房Monday[3, 4]4
厨房Monday[1, 2]2

解释: 每次有两行新行到达时,聚合会发出一个包含最后2行的组。当第一次发出行时,每个窗口的行数是滑动(2)的倍数,窗口同时填满。

窗口滑动=2, 窗口计数=2, 可以在未满前发出=False

输出

房间最后两次读数最后一次读数
厨房Monday[3, 4]4
厨房Monday[1, 2]2

解释: 每次有两行新行到达时,聚合会发出一个包含最后2行的组。聚合直到窗口满之前都不会发出。

窗口滑动=3, 窗口计数=2, 可以在未满前发出=True

输出

房间最后两次读数最后一次读数
厨房Monday[4, 5]5
厨房Monday[1, 2]2

解释: 在窗口填满后,每次有三行新行到达时,聚合会发出一个包含最后2行的组。第一次行被发出是因为窗口第一次填满。在这种情况下,由于滑动大于窗口计数,可以在未满前发出没有效果。

窗口滑动=3, 窗口计数=2, 可以在未满前发出=False

输出

房间最后两次读数最后一次读数
厨房Monday[4, 5]5
厨房Monday[1, 2]2

解释: 在窗口填满后,每次有三行新行到达时,聚合会发出一个包含最后2行的组。第一次行被发出是因为窗口第一次填满。在这种情况下,由于滑动大于窗口计数,可以在未满前发出没有效果。