开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

请问 mysql timestamp(6) 用flink-sql接过来是 null,这点有办法处理不

1859问.png

展开
收起
游客3oewgrzrf6o5c 2022-07-20 14:31:30 831 0
1 条回答
写回答
取消 提交回答
  • 全栈JAVA领域创作者

    如果mysql timestamp(6)用flink-sql接过来是null,可能是因为mysql timestamp(6)的精度不够高,无法被Flink正确解析。为了解决这个问题,可以将mysql timestamp(6)转换为mysql timestamp(3),这样就可以被Flink正确解析了。
    具体做法如下:

    在mysql中将mysql timestamp(6)转换为mysql timestamp(3),例如:
    Copy code
    SELECT DATE_FORMAT(timestamp_column, '%Y-%m-%d %H:%i:%s') AS timestamp_column;
    其中,timestamp_column为mysql timestamp(6)的字段名。

    在Flink中使用“FROM_UNIXTIME”语句将mysql timestamp(3)转换为事件时间,例如:
    Copy code
    SELECT FROM_UNIXTIME(timestamp_column) AS timestamp;
    其中,timestamp_column为mysql timestamp(3)的字段名。
    需要注意的是,如果mysql timestamp(6)的精度不够高,那么在Flink中可能会出现精度丢失的问题。因此,在使用mysql timestamp(6)时需要根据实际情况进行选择。另外,如果使用的是Flink自带的mysql解析器,那么需要在Flink Job代码中指定mysql解析器的版本,例如:

    Copy code
    Configuration config = new Configuration();
    config.setString("dataformat.mysql.version", "5.7.30");
    MySqlIOFactory factory = new MySqlIOFactory(config, new MySqlDeserializer(), new MySqlDeserializer());
    这样就可以使用mysql timestamp(6)进行读取了。

    2023-07-29 20:09:19
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    SQL Server 2017 立即下载
    GeoMesa on Spark SQL 立即下载
    原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载

    相关镜像