flink sql 通过计算列提取字段定义watermark后窗口计算没有结果输

classic Classic list List threaded Threaded
3 messages Options
Q
Reply | Threaded
Open this post in threaded view
|

flink sql 通过计算列提取字段定义watermark后窗口计算没有结果输

Q
大家好,

我遇到一个奇怪的问题,通过计算列提取出某一字段。定义为row_time的watermark,
如下面原始字段为message,从中提取13位unix-timestamp,转成timestamp(3)再定义为watermark。

执行窗口计算不报错,但是无输出结果。

数据源是kafka,各partition内数据均匀。

建表语句类似下面(单位机器不能联外网,下面的语句是我手打的,可能有typo请见谅)

create table kafka_source(
    message Varchar,
    ts as TO_TIMESTAMP(FROM_UNIXTIME(CAST(SPLIT_INDEX(message,’\u001B’,3) AS BIGINT)/1000)),
WATERMARK FOR ts AS ts - INTERVAL ‘2’ SECOND
)WITH(
.......
)

INSERT INTO sink_table
SELECT
TUMBLE_END(ts, INTERVAL ‘10’ SECOND),
COUNT(*)
From Kafka_source
Group by TUMBLE(ts, INTERVAL ‘10’ SECOND);

感谢各位!

Q
Reply | Threaded
Open this post in threaded view
|

Re:flink sql 通过计算列提取字段定义watermark后窗口计算没有结果输

Q
不好意思,


我删掉重建了一下kafka topic之后,结果就正常了。




在 2020-06-08 12:05:17,"xu yihan" <[hidden email]> 写道:

大家好,


我遇到一个奇怪的问题,通过计算列提取出某一字段。定义为row_time的watermark,
如下面原始字段为message,从中提取13位unix-timestamp,转成timestamp(3)再定义为watermark。


执行窗口计算不报错,但是无输出结果。


数据源是kafka,各partition内数据均匀。


建表语句类似下面(单位机器不能联外网,下面的语句是我手打的,可能有typo请见谅)


create table kafka_source(
    message Varchar,
    ts as TO_TIMESTAMP(FROM_UNIXTIME(CAST(SPLIT_INDEX(message,’\u001B’,3) AS BIGINT)/1000)),
WATERMARK FOR ts AS ts - INTERVAL ‘2’ SECOND
)WITH(
.......
)


INSERT INTO sink_table
SELECT
TUMBLE_END(ts, INTERVAL ‘10’ SECOND),
COUNT(*)
From Kafka_source
Group by TUMBLE(ts, INTERVAL ‘10’ SECOND);


感谢各位!

Reply | Threaded
Open this post in threaded view
|

Re: flink sql 通过计算列提取字段定义watermark后窗口计算没有结果输

Leonard Xu

> 我删掉重建了一下kafka topic之后,结果就正常了。

这种可能是kafka topic里有脏数据,解析的时间戳不对,导致窗口没触发


>
>
>
>
> 在 2020-06-08 12:05:17,"xu yihan" <[hidden email]> 写道:
>
> 大家好,
>
>
> 我遇到一个奇怪的问题,通过计算列提取出某一字段。定义为row_time的watermark,
> 如下面原始字段为message,从中提取13位unix-timestamp,转成timestamp(3)再定义为watermark。
>
>
> 执行窗口计算不报错,但是无输出结果。
>
>
> 数据源是kafka,各partition内数据均匀。
>
>
> 建表语句类似下面(单位机器不能联外网,下面的语句是我手打的,可能有typo请见谅)
>
>
> create table kafka_source(
>    message Varchar,
>    ts as TO_TIMESTAMP(FROM_UNIXTIME(CAST(SPLIT_INDEX(message,’\u001B’,3) AS BIGINT)/1000)),
> WATERMARK FOR ts AS ts - INTERVAL ‘2’ SECOND
> )WITH(
> .......
> )
>
>
> INSERT INTO sink_table
> SELECT
> TUMBLE_END(ts, INTERVAL ‘10’ SECOND),
> COUNT(*)
> From Kafka_source
> Group by TUMBLE(ts, INTERVAL ‘10’ SECOND);
>
>
> 感谢各位!
>