繁体   English   中英

Flink Sql match_recognize 返回不同的时间(不是作为输入事件时间)

[英]Flink Sql match_recognize returns different time (not as input event time)

我有一组包含时间戳的流数据,在 flink sql 处理后,返回结果显示不同的时间,这与数据的传入(事件时间)时间戳不匹配。 这是我的代码数据,其中最后两行代表来自 flink sql 的 output 显示不同的时间。 我们是否需要添加任何特定代码才能获得正确的时间?

3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:00:20.0,Entered,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:00:20.0,Entered,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:05:10.0,Conveyer,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:05:10.0,Conveyer,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:10:13.0,Waiting,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:10:13.0,Waiting,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:30:09.0,Security Scan,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:30:09.0,Security Scan,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:50:54.0,Waiting,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 06:50:54.0,Waiting,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 07:00:34.0,Boarding,Airport Recipe,2020-07-07 12:32:10.0) 3> (1001,j001,Goa Vacation,ctx[],action[],NULL,2020-06-05 07:00:34.0,Boarding,Airport Recipe,2020-07-07 12:32:10.0) 4> (1001,2020-06-05 00:30:49.999,2020-06-05 00:35:49.999,Entered,Conveyer) 4> (1001,2020-06-05 00:31:39.999,2020-06-05 00:35:49.999,Entered,Conveyer)

Table matchResult = bsTableEnv
                .sqlQuery("Select Id, StartTime, EndTime, EventName, EventB from eb_user_journey "
                        + "MATCH_RECOGNIZE" + "( PARTITION BY user_id " + "ORDER BY event_time " + "MEASURES "
                        + "A.user_id AS Id, " + "FIRST(A.event_time) AS StartTime, "
                        + "FIRST(B.event_time) AS EndTime, A.event_name AS EventName, B.event_name AS EventB"
                        + " ONE ROW PER MATCH " + " AFTER MATCH SKIP TO NEXT ROW " + "  PATTERN (A+ B) " + " DEFINE"
                        + " A as A.event_name = 'Entered' , B as B.event_name = 'Conveyer')");
        matchResult.printSchema();

        TupleTypeInfo<Tuple5<String, Timestamp, Timestamp, String, String>> tupleType = new TupleTypeInfo<>(
                Types.STRING(), Types.SQL_TIMESTAMP(), Types.SQL_TIMESTAMP(), Types.STRING(), Types.STRING());

        DataStream<Tuple5<String, Timestamp, Timestamp, String, String>> cassandraDSTP = bsTableEnv
                .toAppendStream(matchResult, tupleType); `

看起来有些东西正在将时间戳转换为 UTC。 您应该能够在 select 语句中使用这些时间函数之一进行转换,可能是 LOCALTIMESTAMP 或 CONVERT_TZ。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM