Flink SQL 解析复杂嵌套Json数据

Flink SQL 解析复杂嵌套Json数据

数据类型映射关系:

官网链接:官网链接
数据类型映射关系

复杂Json数据示例:

  • string : string类型
"name": "Tom"
-- >
DDL : name string
  • string : row类型
"title": {
  "title_name": "表情包",
  "title_number":3
 }
-->
DDL : title row<title_name string, title_number int>
  • string : array类型
"user_info": [{
  "address": "北京市",
  "city": "beijing"
 }, {
  "address": "上海市",
  "city": "shanghai"
 }]
-->
DDL : user_info array<row<address string, city string>>
  • string : map类型
"time_info": {
  "timestamp": 1657332118000
 }
-->
DDL : time_info map<string, bigint>

Flink DDL定义:

CREATE TABLE kafka_source (
    name string,
    title row<title_name string, title_number int>,
    user_info array<row<address string, city string>>,
    time_info map<string, bigint>
) WITH (
    'connector' = 'kafka',	-- kafka connector
    'topic' = 'xxx', 		-- kafka topic
    'properties.bootstrap.servers' = 'ip1:9092,ip2:9092,ip3:9092', -- kafka ip和端口信息
    'properties.group.id' = 'xxx', 		-- 消费者组
    'scan.startup.mode' = 'latest-offset', 	-- 从最新的 offset 开始读取,value值可为 latest-offset | earliest-offset | timestamp, 如果为timestamp,则必须添加'scan.startup.timestamp-millis' = '1656910800000'设置,标识从那个时间戳开始消费
    'format' = 'json',		-- 数据源格式为 json
    'json.fail-on-missing-field' = 'false', -- 如果缺少字段,是否失败
    'json.ignore-parse-errors' = 'true'	-- 跳过带有解析错误的字段和行,而不是失败。如果出现错误,字段将设置为 null
)

注意事项:

  • Json 中的每个 {} 都需要用 Row 类型来表示
  • Json 中的每个 [] 都需要用 Arrary 类型来表示
  • 数组的下标是从 1 开始的不是 0
  • SQL中村子关键字时,需要用反引号修饰 例如:`timestamp`
  • select 语句中的字段类型和顺序一定要和结果表的字段类型和顺序保持一致
  • UDF 可以直接在建表语句中使用

Flink SQL解析:

select
name
, title
, title.title_name as title_name
, title.title_number as title_number
, user_info
, user_info[1].address as address
, time_info
, time_info['timestamp'] as `timestamp`
from kafka_source

结果:

结果
±—±-------------------------------±-------------------------------±-------------------------------±-------------±-------------------------------±-------------------------------±-------------------------------±---------------------+
| op | name | title | title_name | title_number | user_info | address | time_info | timestamp |
±—±-------------------------------±-------------------------------±-------------------------------±-------------±-------------------------------±-------------------------------±-------------------------------±---------------------+
| +I | Tom1 | +I[表情包, 3] | 表情包 | 3 | [+I[北京市, beijing], +I[上… | 北京市 | {timestamp=1657332118000} | 1657332118000 |

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值