Hi 那我觉得目前最佳实践就是,我用DataStream的API先把数据清洗成 json object in top level 在导入Kafka,之后再FlinkSQL 处理。
可爱的木兰 ________________________________ 发件人: Benchao Li <libenc...@apache.org> 发送时间: 2020年7月8日 20:46 收件人: user-zh <user-zh@flink.apache.org> 主题: Re: Flink SQL复杂JSON解析 看代码应该是支持复合类型的,你可以试下。 hua mulan <deadwi...@outlook.com> 于2020年7月8日周三 下午8:34写道: > 我试了下 Array里是基本元素可以CROSS JOIN > UNNEST直接解开。如果Array里是Row、POJO、Tuple这种复合类型我就只能UDTF了是吧。 > > 来自 Outlook<http://aka.ms/weboutlook> > > ________________________________ > 发件人: Benchao Li <libenc...@apache.org> > 发送时间: 2020年7月6日 22:35 > 收件人: user-zh <user-zh@flink.apache.org> > 主题: Re: Flink SQL复杂JSON解析 > > 我理解最佳实践是第一种,先读出来array,再用table function展开成多行。 > 实际上把array转成多行是Flink 内置支持的,可以参考[1]的”Expanding arrays into a relation“部分 > > [1] > > https://ci.apache.org/projects/flink/flink-docs-master/dev/table/sql/queries.html#joins > > 王 outlook <deadwi...@outlook.com> 于2020年7月6日周一 下午9:29写道: > > > 像如下这种JSON输入, > > > > { > > "id": 1, > > "many_names": [ > > {"name": "foo"}, > > {"name": "bar"} > > ] > > } > > > > 输出表两行 id 1, name foo | id 1, name bar > > > > 最佳实践是从Kafka读到后,调用TableFunction这个UDTF转出多行? > > 还是Flink SQL有更方便的操作,从Source读出来就能把数组展开。 > > > > > > 来自 Outlook<http://aka.ms/weboutlook> > > > > > -- > > Best, > Benchao Li > -- Best, Benchao Li