You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by "kandy.wang" <ka...@163.com> on 2020/07/28 13:03:22 UTC

Flink SQL 解析复杂(嵌套)JSON的问题 以及写入到hive类型映射问题

json格式,如果是一个json array 该如何定义 schema,array里还可能存在嵌套json array的情况。

如数据:
{"user_info":{"user_id":"0111","name":"xxx"},"timestam":1586676835655,"id":"10001","jsonArray":[{"name222":"xxx","user_id222":"0022"},{"name333":"name3333","user_id222":"user3333"},{"cc":"xxx333","user_id444":"user4444","name444":"name4444"}]}


参照:https://www.cnblogs.com/Springmoon-venn/p/12664547.html
需要schema这样定义:
user_info 定义成:ROW<user_id STRING, name STRING>
jsonArray 定义成 : ARRAY<ROW<user_id222 STRING, name222 STRING>>


问题是:
如果json array 里还有一个array 也是继续嵌套定义吗? 这个数据是要写入到hive,该怎么映射,array <ROW> ,怎么映射成Hive类型,比如映射成array<string>,这种情况的json该如何处理? 有没有什么办法直接把json array,直接映射成array<string>,试了一下发现不行,该如何处理这种复杂类型。

Re: Flink SQL 解析复杂(嵌套)JSON的问题 以及写入到hive类型映射问题

Posted by Leonard Xu <xb...@gmail.com>.
Hello

> 问题是:
> 如果json array 里还有一个array 也是继续嵌套定义吗? 这个数据是要写入到hive,该怎么映射,array <ROW> ,怎么映射成Hive类型,比如映射成array<string>,这种情况的json该如何处理? 有没有什么办法直接把json array,直接映射成array<string>,试了一下发现不行,该如何处理这种复杂类型。


Json format有一个issue在解这个问题[1],可以把jsonNode强制转成 string, 1.12里会支持,可以看下.

Best
Leonard
[1] https://issues.apache.org/jira/browse/FLINK-18002 <https://issues.apache.org/jira/browse/FLINK-18002>