timestamp格式怎么输入_Flink SQL Json格式实战

概述

Flink sql支持基于JSON格式从kafka消费数据并写入到kafka。目前,JSON schema是依赖表schema派生的,还不支持显示的设置Json schema。Flink Json格式使用jackson解析和生成Json字符串。如果打算使用Json格式进行数据序列化和反序列化,均需要flink-json依赖

        <dependency>            <groupId>org.apache.flinkgroupId>            <artifactId>flink-jsonartifactId>            <version>${flink.version}version>        dependency>

Json格式参数说明

c60f83492be87329451d0f51ae1a28dd.png

详解:

format:必选参数,默认为none,这里肯定要设置为json

json.fail-on-missing-field:可选参数,默认false。当数据中缺少字段时,是否失败。如表table(a int, b string),数据是{"a":1}。false表示不失败,缺失字段设为null;true则表示失败,触发job重启或者退出。

json.ignore-parse-errors可选参数,默认false。当字段类型和数据格式解析失败,是否通过设置为null的方式规避错误数据。注意:这里是有个不太理想的状况,当数据是使用事件时间进行处理时候,该种规避方式会将用于提取事件时间的字段设置为null,这在flink sql内核中是不允许的,规避无效,job会退出或者重启(关于这一点后续会专门发文)。
json.timestamp-format.standard:可选参数,默认SQL,指定输入输出所使用的timestamp格式。SQL对应于yyyy-MM-dd HH:mm:ss.s{precision}如2020-12-30 12:13:14.123。也可以设置为ISO-8601,对应于yyyy-MM-ddTHH:mm:ss.s{precision}2020-12-30T12:13:14.123

数据类型对应关系

da14e372ea958018f3358587bc04a8c5.png

实战案例代码

public static void main(String[] args) throws Exception {        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();        env.setParallelism(1);        env.setRestartStrategy(RestartStrategies.noRestart());        logger.info(env.getConfig().toString());        StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);        String sourceDDL = "CREATE TABLE json_source (" +                "user_id INT, " +                "product STRING," +                "ts timestamp(3)," +                "watermark for ts as ts - interval '5' second" +                ") WITH (\n" +                " 'connector' = 'kafka',\n" +                " 'scan.startup.mode' = 'latest-offset',\n" +                " 'topic' = 'json_source',\n" +                " 'properties.bootstrap.servers' = 'felixzh:9092',\n" +                " 'properties.group.id' = 'testGroup',\n" +                " 'format' = 'json',\n" +                " 'json.fail-on-missing-field' = 'false',\n" +                " 'json.ignore-parse-errors' = 'true'\n" +                ")";        String sinkDDL = "CREATE TABLE sink (user_id INT,product STRING) WITH (\n" +                " 'connector' = 'kafka',\n" +                " 'topic' = 'sink',\n" +                " 'properties.bootstrap.servers' = 'felixzh:9092',\n" +                " 'format' = 'json'\n" +                ")";        String transformSQL = "insert into sink(user_id,product) SELECT user_id,product FROM json_source ";        tableEnv.executeSql(sourceDDL);        tableEnv.executeSql(sinkDDL);        tableEnv.executeSql(transformSQL);    }

完整源码github地址:

https://github.com/felixzh2020/felixzh-learning-flink/tree/master/format/src/main/java/com/felixzh/flink/format/json

实战案例结果

cb669dec3c3a5622fcd8306b3cfd997a.png

f9f2ed1e5f418ce5870e75364c642f60.png

01ffabb5ff0b81ca6b020238ee981851.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值