Blog
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 (
...
)