计算列可以使用其它列的数据,计算出其所属列的数值。如果您的数据源表中没有TIMESTAMP类型的列,可以使用计算列方法从其它类型的字段进行转换。
计算列概念
计算列是虚拟列,并非实际存储在表中。计算列可以通过表达式、内置函数、或是自定义函数等方式,使用其它列的数据,计算出其所属列的数值。计算列在Flink SQL中可以像普通字段一样被使用。
计算列的用途
目前 Watermark 的Event Time(也称为rowtime)列只支持TIMESTAMP类型(未来会支持LONG类型)。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 (
'connector' = 'datahub',
);
如上示例中所示,源表数据中的字段
TIME
包含时间信息,为BIGINT类型。用计算列的功能将字段
TIME
转换成了TIMESTAMP类型的
ts
字段,并将
ts
字段作为watermark的rowtime字段。