Flink支持把Timestamp(3)这种类型声明声明为事件时间列,并且为它生成watermark。 你上面提到的"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",并不是一种数据类型,它只是Timestamp的一种string表达形式,这个主要是在json format里面把一个字符串解析为timestamp类型的时候需要的一种格式。
所以如果你有其他类型的字段,比如varchar、long、int等等,都可以通过内置函数或者udf将其转成timestamp(3)的类型,再在此基础上做watermark生成。 [email protected] <[email protected]> 于2020年5月29日周五 上午10:25写道: > 而且 flink不是只支持这种"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 类型解析为watermark吗,就对这样有点疑惑 > > > > [email protected] > > 发件人: [email protected] > 发送时间: 2020-05-29 10:20 > 收件人: Benchao Li > 抄送: user-zh > 主题: Re: Re: flink-sql watermark问题 > > 就是我是long类型的时间戳,但是用TO_TIMESTAMP转换成'yyyy-MM-dd HH:mm:ss' 之后依然可以生成watermark。 > > > [email protected] > > 发件人: Benchao Li > 发送时间: 2020-05-28 17:00 > 收件人: user-zh > 主题: Re: flink-sql watermark问题 > Hi, > > 没太看明白你的问题是什么。目前的确是只支持Timestmap(3)作为事件时间列。 > 之所以还不支持long作为事件时间列,主要考虑的是时区问题。但是这个社区也在考虑,可以参考[1] > > [1] https://issues.apache.org/jira/browse/FLINK-16938 > > [email protected] <[email protected]> 于2020年5月28日周四 下午4:22写道: > > > flink-1.10 sql只支持 timestamp(3) 类型字段生成watermark > > 但是long这样转换后也可以生成watermark很奇怪? > > CREATE TABLE user_log ( > > response_size int, > > rowtime BIGINT, > > w_ts as TO_TIMESTAMP(FROM_UNIXTIME(rowtime/1000),'yyyy-MM-dd HH:mm:ss'), > > WATERMARK FOR w_ts AS w_ts - INTERVAL '5' SECOND --5秒的延迟 > > ) > > > > > > > > [email protected] > > > > > -- > > Best, > Benchao Li > -- Best, Benchao Li
