Flink, 大数据

flink-37 Flink sql 时间属性

所谓的时间属性,其实就是每个表schema的一部分,它可以在创建表的DDL里直接定义一个字段也可以在DataStream转换成表时定义

  • 一旦定义了时间属性,它就可以作为一个普通的字段引用,并且可以在基于时间的操作中使用。
  • 时间属性数据类型为TIMESTAMP,它的行为类似于常规时间戳,可以直接访问并且进行计算
    • TIMESTAMP(3) 精确到毫秒

事件时间

事件时间属性可以在创建表DDL中定义,增加一个字段,通过WATERMARK语句来定义时间属性

CREATE TABLE EventTable (
    user STRING,
    url STRING,
    // 事件时间 自身字段
    ts TIMESTAMP(3)
    // 定义水位线规则
    WATERMARK FOR ts AS ts - INTERVAL '5' SECOND 
) WITH (
    ...
)

这里把ts字段定义为事件时间属性,而且基于ts设置了6秒的水位线延迟

时间戳类型必须是TIMESTAMP或者TIMESTAMP_LTZ类型,但是时间戳一般都是秒或毫秒(BIGINT类型),这种情况下需要转换:

ts BIGINT,
time_ltz AS TO_TIMESTAMP_LTZ(ts, 3),

处理时间

在定义处理时间属性时,必须要额外声明一个字段,专门用来保存当前的处理时间。

在创建表的DDL(CREATE TABLE语句中),可以增加一个额外的字段,通过调用系统内置的PROCTIME()函数来指定当前的处理时间属性。

CREATE TABLE EventTable (
    user STRING,
    url STRING,
    // 处理时间 新增字段
    ts PROCTIME()
) WITH (
    ...
)