计算列
计算列可以使用其它列的数据,计算出其所属列的数值。如果您的数据源表中没有TIMESTAMP类型的列,可以使用计算列方法从其它类型的字段进行转换。
计算列概念
计算列是虚拟列,并非实际存储在表中。计算列可以通过表达式、内置函数、或是自定义函数等方式,使用其它列的数据,计算出其所属列的数值。计算列在Flink SQL中可以像普通字段一样被使用。
计算列的用途
目前Watermark的Event Time(也称为Rowtime)列只支持TIMESTAMP类型。Watermark只能定义在源表DDL中,如果您的源表中没有TIMESTAMP类型的列,可以使用计算列从其他类型的字段进行转换。
计算列语法
column_name AS computed_column_expression
计算列示例
Watermark的Rowtime必须是TIMESTAMP数据类型。当前实时计算支持毫秒级别的、在Unix时间戳里是13位TIMESTAMP数据类型。如果DataHub的TIME字段是微秒级别的(16位Unix时间戳),可以用计算列方法转换为13位的时间戳,如下所示。
CREATE TABLE test_stream(
a INT,
b BIGINT,
`TIME` BIGINT,
ts AS TO_TIMESTAMP(`TIME`/1000), --使用计算列方法,将16位时间戳转换为13位时间戳。
WATERMARK FOR ts AS WITHOFFSET(ts, 1000)
) WITH (
type = 'datahub',
...
);
源表数据中的字段TIME
包含时间信息,为BIGINT类型。用计算列的功能将字段TIME
转换成13位时间戳(TIMESTAMP)类型字段ts
,并将ts
字段作为Watermark的Rowtime字段。