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 王 outlook <de...@outlook.com> on 2020/07/06 13:28:55 UTC

Flink SQL复杂JSON解析

像如下这种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>

回复: Flink SQL复杂JSON解析

Posted by hua mulan <de...@outlook.com>.
Hi

那我觉得目前最佳实践就是,我用DataStream的API先把数据清洗成 json object in top level 在导入Kafka,之后再FlinkSQL 处理。

可爱的木兰
________________________________
发件人: Benchao Li <li...@apache.org>
发送时间: 2020年7月8日 20:46
收件人: user-zh <us...@flink.apache.org>
主题: Re: Flink SQL复杂JSON解析

看代码应该是支持复合类型的,你可以试下。

hua mulan <de...@outlook.com> 于2020年7月8日周三 下午8:34写道:

> 我试了下 Array里是基本元素可以CROSS JOIN
> UNNEST直接解开。如果Array里是Row、POJO、Tuple这种复合类型我就只能UDTF了是吧。
>
> 来自 Outlook<http://aka.ms/weboutlook>
>
> ________________________________
> 发件人: Benchao Li <li...@apache.org>
> 发送时间: 2020年7月6日 22:35
> 收件人: user-zh <us...@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 <de...@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

Re: Flink SQL复杂JSON解析

Posted by Benchao Li <li...@apache.org>.
看代码应该是支持复合类型的,你可以试下。

hua mulan <de...@outlook.com> 于2020年7月8日周三 下午8:34写道:

> 我试了下 Array里是基本元素可以CROSS JOIN
> UNNEST直接解开。如果Array里是Row、POJO、Tuple这种复合类型我就只能UDTF了是吧。
>
> 来自 Outlook<http://aka.ms/weboutlook>
>
> ________________________________
> 发件人: Benchao Li <li...@apache.org>
> 发送时间: 2020年7月6日 22:35
> 收件人: user-zh <us...@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 <de...@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

回复: Flink SQL复杂JSON解析

Posted by hua mulan <de...@outlook.com>.
我试了下 Array里是基本元素可以CROSS JOIN UNNEST直接解开。如果Array里是Row、POJO、Tuple这种复合类型我就只能UDTF了是吧。

来自 Outlook<http://aka.ms/weboutlook>

________________________________
发件人: Benchao Li <li...@apache.org>
发送时间: 2020年7月6日 22:35
收件人: user-zh <us...@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 <de...@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

Re: Flink SQL复杂JSON解析

Posted by Benchao Li <li...@apache.org>.
我理解最佳实践是第一种,先读出来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 <de...@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

Re: Flink SQL复杂JSON解析

Posted by Leonard Xu <xb...@gmail.com>.
Hi,

Schema 里可以声明成array, 推荐有拆成多行数据的需求用UDTF处理,现在source里是没看到有拆分多行的实现。

Best,
Leonard Xu

> 在 2020年7月6日,21:28,王 outlook <de...@outlook.com> 写道:
> 
> TableFunction这个UDTF