社区有个 issue 正在解决这个问题,可以关注一下
https://issues.apache.org/jira/browse/FLINK-18002

Best,
Jark

On Fri, 10 Jul 2020 at 11:13, Leonard Xu <xbjt...@gmail.com> wrote:

> Hi, Peihui
>
> 我理解你的需求是json中有一些复杂的字段,你不想解析,希望后续用UDTF在来解析,这个应该做不到的,现在的json format 的解析的底层实现
> 就是按照json的标准格式解析(jackson)的,没法将一个
> jsonObject解析成一个String。另外如果你jsonObject中的内容格式不确定,也不适合在Schema中声明,
> 因为SQL 是预编译后执行的,不能做到schema里是三个field,执行时又能解析四个field。
>
> 一种做法是定义复杂的jsonObject对应的ROW<a INT, b STRING, …>
> 将全部可能的字段包含进去,每条记录没有的字段解析出来的会是null,fail-on-missing-field 默认关闭的,
> 另外一种推荐你把复杂的字段在上游就转义成一个String放到json的一个field中,这样Flink解析出来就是一个String,
> 然后query里用UDTF处理。
>
>
> 祝好
> Leonard Xu
>
>
>
>
> > 在 2020年7月10日,10:16,Peihui He <peihu...@gmail.com> 写道:
> >
> > Hello,
> >
> >       实际上,我也并不太关心这个字段的内容,能按string 保存下来就好了。
> >
> > Best wishes.
> >
> > Peihui He <peihu...@gmail.com> 于2020年7月10日周五 上午10:12写道:
> >
> >> Hello,
> >>
> >>       明白您的意思。但是当一个字段下的json 字段不确定,类似一个黑盒子一样的化,就不好定义了。
> >>
> >>
> >> Best wishes.
> >>
> >> LakeShen <shenleifight...@gmail.com> 于2020年7月10日周五 上午10:03写道:
> >>
> >>> Hi Peihui,
> >>>
> >>> 如果消费的 Kafka json 中,json 比较复杂的话,比如存在嵌套,就像下面的格式:
> >>>
> >>> {
> >>>    "a":"b",
> >>>    "c":{
> >>>        "d":"e",
> >>>        "g":"f"
> >>>    }
> >>> },
> >>>
> >>> 那么在 kafka table source 可以使用 row 来定义:
> >>>
> >>> create table xxx (
> >>> a varchar,
> >>> c row<d varchar , g varchar>
> >>> )
> >>>
> >>> 如果 还存在嵌套,可以继续再使用 Row 来定义。
> >>>
> >>> Best,
> >>> LakeShen
> >>>
> >>> Peihui He <peihu...@gmail.com> 于2020年7月10日周五 上午9:12写道:
> >>>
> >>>> Hello:
> >>>>
> >>>>        在用flink
> sql从kafka消费数据时,有些json比较复杂,想直接定义为object,在后续通过udf转为string。
> >>>>
> >>>>         有什么办法不?我在建表的时候有提示过json_object 类型,但是用了又提示其他类型。
> >>>>
> >>>>
> >>>> Best wishes.
> >>>>
> >>>
> >>
>
>

回复