【问题标题】:Flink SQL : Cast Bigint into TimesampFlink SQL:将 Bigint 转换为时间戳
【发布时间】:2019-06-20 23:34:43
【问题描述】:

这个问题很简单,但我在互联网上找不到任何答案。

我有一个如下所示的 Flink SQL 查询:

SELECT 
  HOP_START(timestampMs, INTERVAL '5' SECOND, INTERVAL '10' SECOND) as wStart, SUM(`value`) - MINVALUE(`value`), ID
FROM MySource 
GROUP BY HOP(timestampMs, INTERVAL '5' SECOND, INTERVAL '10' SECOND), ID

问题是我的字段 timestampMs 被视为 BIGINT 而不是 TIMESTAMP,并且我在 HOP 函数上有错误。如何将其转换为 TIMESTAMP 类型?

【问题讨论】:

    标签: apache-flink flink-sql


    【解决方案1】:

    不幸的是,没有内置支持将 Epoch Millis 转换为 java.sql.Timestamp。您可以为此使用 UDF:

    class UnixEpochToTimestamp extends ScalarFunction {
      def eval(epochMillis: Long): Timestamp = {
        new Timestamp(epochMillis)
      }
    }
    

    【讨论】:

    • 当我这样做时,我收到以下错误:Cast function cannot convert value of type BIGINT to type TIMESTAMP(3)
    • 你的时间戳是在纪元毫秒吗?另外,请参阅我的更新答案
    • 是的,我的时间采样是 epoch millis。我很惊讶我必须为这么简单的事情创建 UDF。
    • 人们总是喜欢解决难题,而不是专注于简单的事情。
    • @twalthr 有时简单的东西就是好的用户体验;)
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 2018-10-07
    • 2014-03-09
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多