You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by "guaishushu1103@163.com" <gu...@163.com> on 2020/05/28 08:22:40 UTC
flink-sql watermark问题
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秒的延迟
)
guaishushu1103@163.com
回复: flink-sql watermark问题
Posted by "112039604@qq.com" <11...@qq.com>.
w_ts as TO_TIMESTAMP(FROM_UNIXTIME(rowtime/1000),'yyyy-MM-dd HH:mm:ss'),这个语句产生的就是一个timestamp的数据Flink内置函数:https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/table/functions/systemFunctions.htmlFROM_UNIXTIME(numeric[, string]):
Returns a representation of the numeric argument as a value in string format (default is 'YYYY-MM-DD hh:mm:ss'). numeric is an internal timestamp value representing seconds since '1970-01-01 00:00:00' UTC, such as produced by the UNIX_TIMESTAMP() function. The return value is expressed in the session time zone (specified in TableConfig).
E.g., FROM_UNIXTIME(44) returns '1970-01-01 09:00:44' if in UTC time zone, but returns '1970-01-01 09:00:44' if in 'Asia/Tokyo' time zone.
Only supported in blink planner.
TO_TIMESTAMP(string1[, string2]):
Converts date time string string1 with format string2 (by default: 'yyyy-MM-dd HH:mm:ss') under the session time zone (specified by TableConfig) to a timestamp.
Only supported in blink planner.
112039604@qq.com
发件人: guaishushu1103@163.com
发送时间: 2020-05-28 16:22
收件人: user-zh
主题: flink-sql watermark问题
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秒的延迟
)
guaishushu1103@163.com
Re: Re: flink-sql watermark问题
Posted by "wangweiguang@stevegame.cn" <wa...@stevegame.cn>.
你的代码:w_ts as TO_TIMESTAMP(FROM_UNIXTIME(rowtime/1000),'yyyy-MM-dd HH:mm:ss')
这里里面的 FROM_UNIXTIME 函数就是接受BIGINT参数,返回 VARCHAR类型的日期值,默认日期格式:yyyy-MM-dd HH:mm:ss
然后通过TO_TIMESTAMP函数转换成TIMESTAMP类型,是timestamp(3)类型,这个只能用blink planner
参考阿里云网址:https://help.aliyun.com/knowledge_list_page/62717/1.html?spm=a2c4g.11186631.2.4.41933356drYMGX
里面有flink 日期函数接受!
发件人: Benchao Li
发送时间: 2020-05-29 10:35
收件人: user-zh
主题: Re: Re: flink-sql watermark问题
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生成。
guaishushu1103@163.com <gu...@163.com> 于2020年5月29日周五 上午10:25写道:
> 而且 flink不是只支持这种"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 类型解析为watermark吗,就对这样有点疑惑
>
>
>
> guaishushu1103@163.com
>
> 发件人: guaishushu1103@163.com
> 发送时间: 2020-05-29 10:20
> 收件人: Benchao Li
> 抄送: user-zh
> 主题: Re: Re: flink-sql watermark问题
>
> 就是我是long类型的时间戳,但是用TO_TIMESTAMP转换成'yyyy-MM-dd HH:mm:ss' 之后依然可以生成watermark。
>
>
> guaishushu1103@163.com
>
> 发件人: 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
>
> guaishushu1103@163.com <gu...@163.com> 于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秒的延迟
> > )
> >
> >
> >
> > guaishushu1103@163.com
> >
>
>
> --
>
> Best,
> Benchao Li
>
--
Best,
Benchao Li
Re: Re: flink-sql watermark问题
Posted by Benchao Li <li...@gmail.com>.
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生成。
guaishushu1103@163.com <gu...@163.com> 于2020年5月29日周五 上午10:25写道:
> 而且 flink不是只支持这种"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 类型解析为watermark吗,就对这样有点疑惑
>
>
>
> guaishushu1103@163.com
>
> 发件人: guaishushu1103@163.com
> 发送时间: 2020-05-29 10:20
> 收件人: Benchao Li
> 抄送: user-zh
> 主题: Re: Re: flink-sql watermark问题
>
> 就是我是long类型的时间戳,但是用TO_TIMESTAMP转换成'yyyy-MM-dd HH:mm:ss' 之后依然可以生成watermark。
>
>
> guaishushu1103@163.com
>
> 发件人: 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
>
> guaishushu1103@163.com <gu...@163.com> 于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秒的延迟
> > )
> >
> >
> >
> > guaishushu1103@163.com
> >
>
>
> --
>
> Best,
> Benchao Li
>
--
Best,
Benchao Li
Re: Re: flink-sql watermark问题
Posted by "guaishushu1103@163.com" <gu...@163.com>.
而且 flink不是只支持这种"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 类型解析为watermark吗,就对这样有点疑惑
guaishushu1103@163.com
发件人: guaishushu1103@163.com
发送时间: 2020-05-29 10:20
收件人: Benchao Li
抄送: user-zh
主题: Re: Re: flink-sql watermark问题
就是我是long类型的时间戳,但是用TO_TIMESTAMP转换成'yyyy-MM-dd HH:mm:ss' 之后依然可以生成watermark。
guaishushu1103@163.com
发件人: 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
guaishushu1103@163.com <gu...@163.com> 于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秒的延迟
> )
>
>
>
> guaishushu1103@163.com
>
--
Best,
Benchao Li
Re: Re: flink-sql watermark问题
Posted by "guaishushu1103@163.com" <gu...@163.com>.
就是我是long类型的时间戳,但是用TO_TIMESTAMP转换成'yyyy-MM-dd HH:mm:ss' 之后依然可以生成watermark。
guaishushu1103@163.com
发件人: 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
guaishushu1103@163.com <gu...@163.com> 于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秒的延迟
> )
>
>
>
> guaishushu1103@163.com
>
--
Best,
Benchao Li
Re:Re: flink-sql watermark问题
Posted by 程龙 <13...@163.com>.
可以先在之前对于long类型的字段转换成Timestmap 类型 再生成watermark
在 2020-05-28 17:00:53,"Benchao Li" <li...@gmail.com> 写道:
>Hi,
>
>没太看明白你的问题是什么。目前的确是只支持Timestmap(3)作为事件时间列。
>之所以还不支持long作为事件时间列,主要考虑的是时区问题。但是这个社区也在考虑,可以参考[1]
>
>[1] https://issues.apache.org/jira/browse/FLINK-16938
>
>guaishushu1103@163.com <gu...@163.com> 于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秒的延迟
>> )
>>
>>
>>
>> guaishushu1103@163.com
>>
>
>
>--
>
>Best,
>Benchao Li
Re: flink-sql watermark问题
Posted by Benchao Li <li...@gmail.com>.
Hi,
没太看明白你的问题是什么。目前的确是只支持Timestmap(3)作为事件时间列。
之所以还不支持long作为事件时间列,主要考虑的是时区问题。但是这个社区也在考虑,可以参考[1]
[1] https://issues.apache.org/jira/browse/FLINK-16938
guaishushu1103@163.com <gu...@163.com> 于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秒的延迟
> )
>
>
>
> guaishushu1103@163.com
>
--
Best,
Benchao Li