数据湖探索 DLI-窗口:TUMBLE WINDOW扩展

时间:2024-06-24 20:27:58

TUMBLE WINDOW扩展

功能描述

DLI TUMBLE函数功能增强主要包括以下功能:
  • TUMBLE窗口周期性触发,控制延迟

    TUMBLE窗口结束之前,可以根据设置的触发频率周期性地触发窗口,输出从窗口开始时间到当前周期时间窗口内的计算结果值,但不影响最终窗口输出值,从而在窗口结束前的每个周期都可以看到最新的结果。

  • 提高数据的精确性

    在窗口结束后,允许设置延迟时间。根据设置的延迟时间,每到达一个迟到数据,则更新窗口的输出结果

注意事项

  • 如果使用insert语句将结果写入sink中,则sink需要支持upsert模式,所以结果表需要支持upsert操作,且定义主键。
  • 延迟时间设置仅用于事件时间,在处理时间中不生效。
  • 辅助函数必须使用与 GROUP BY 子句中的分组窗口函数完全相同的参数来调用。
  • 如果使用事件时间,则需要使用watermark标识,代码如下(其中order_time被标识为事件时间列,watermark时间设置为3秒):
    CREATE TABLE orders (
      order_id string,
      order_channel string,
      order_time timestamp(3),
      pay_amount double,
      real_pay double,
      pay_time string,
      user_id string,
      user_name string,
      area_id string,
      watermark for order_time as order_time - INTERVAL '3' SECOND
    ) WITH (
      'connector' = 'kafka',
      'topic' = 'kafkaTopic',
      'properties.bootstrap.servers' = 'KafkaAddress1:KafkaPort,KafkaAddress2:KafkaPort',
      'properties.group.id' = 'GroupId',
      'scan.startup.mode' = 'latest-offset',
      'format' = 'json'
    );
  • 如果使用处理时间,则需要使用计算列设置,其代码如下(其中proc即为处理时间列):
    CREATE TABLE orders (
      order_id string,
      order_channel string,
      order_time timestamp(3),
      pay_amount double,
      real_pay double,
      pay_time string,
      user_id string,
      user_name string,
      area_id string,
      proc as proctime()
    ) WITH (
      'connector' = 'kafka',
      'topic' = 'kafkaTopic',
      'properties.bootstrap.servers' = 'KafkaAddress1:KafkaPort,KafkaAddress2:KafkaPort',
      'properties.group.id' = 'GroupId',
      'scan.startup.mode' = 'latest-offset',
      'format' = 'json'
    );

语法格式

TUMBLE(time_attr, window_interval, period_interval, lateness_interval)

语法示例

例如当前time_attr属性列为:testtime,窗口时间间隔为10秒,设置延迟时间为10秒语法示例为:
TUMBLE(testtime, INTERVAL '10' SECOND, INTERVAL '10' SECOND, INTERVAL '10' SECOND)
support.huaweicloud.com/sqlref-flink-dli/dli_08_15069.html