错误如下:
正确如下:
为何这样??
Flink SQL引入了计算列(computed column)的概念,其语法为column_name AS computed_column_expression,它的作用是在表中产生数据源schema不存在的列,并且可以利用原有的列、各种运算符及内置函数。比如在以上SQL语句中,就利用内置的PROCTIME()函数生成了处理时间列,并利用原有的ts字段与FROM_UNIXTIME()、TO_TIMESTAMP()两个时间转换函数生成了事件时间列。
为什么canalTimeStamp字段不能直接用作事件时间呢?因为Flink SQL规定***时间特征必须是TIMESTAMP(3)类型***,即形如"yyyy-MM-ddTHH:mm:ssZ"格式的字符串,Unix时间戳自然是不行的,所以要先转换一波。
既然有了事件时间,那么自然要有水印。