FlinkSQL如何定义JsonObject数据的字段类型

classic Classic list List threaded Threaded
18 messages Options
Reply | Threaded
Open this post in threaded view
|

FlinkSQL如何定义JsonObject数据的字段类型

xiao cai
Hi,
flink version: 1.11.2
api: flink-sql


场景:使用flink sql定义了一张kafka的source表,kafka中数据为json格式的字符串。
其中context是json的一个键,其值为jsonObject,数据示例如下:
{
 “id”: 1,
 "context”:  {
  …
(这里的数据为jsonObject,具体schema不确定,
由各个业务方自行确定,可能嵌套,也可能不嵌套,完全不可控)
   }
}
建表语句为:
CREATE TABLE json_source (
id bigint,
context <TYPE>
) WITH (
 'connector' = 'kafka’,
 'format' = 'json’
);


问题: 该使用什么数据类型来指定类型<TYPE>呢?从目前的flink sql 的 data type 里感觉没有很合适的匹配项,不管是ROW,或者MAP都不太合适。


请求指教,万分感谢!
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

silence-2
可以用string



--
Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

xiao cai
In reply to this post by xiao cai
String不行,取出来的值是null


 Original Message
Sender: silence<[hidden email]>
Recipient: user-zh<[hidden email]>
Date: Monday, Dec 7, 2020 14:26
Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型


可以用string -- Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

李轲
可以试试ROW

发自我的iPhone

> 在 2020年12月7日,15:43,xiao cai <[hidden email]> 写道:
>
> String不行,取出来的值是null
>
>
> Original Message
> Sender: silence<[hidden email]>
> Recipient: user-zh<[hidden email]>
> Date: Monday, Dec 7, 2020 14:26
> Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型
>
>
> 可以用string -- Sent from: http://apache-flink.147419.n8.nabble.com/

Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

xiao cai
In reply to this post by xiao cai
ROW需要写明具体的字段类型,比如:
ROW<`id` string, …>,但是我并没有办法知道jsonObject中具体的schema


 Original Message
Sender: 李轲<[hidden email]>
Recipient: user-zh<[hidden email]>
Date: Monday, Dec 7, 2020 16:14
Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型


可以试试ROW 发自我的iPhone > 在 2020年12月7日,15:43,xiao cai <[hidden email]> 写道: > > String不行,取出来的值是null > > > Original Message > Sender: silence<[hidden email]> > Recipient: user-zh<[hidden email]> > Date: Monday, Dec 7, 2020 14:26 > Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型 > > > 可以用string -- Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re:Re: FlinkSQL如何定义JsonObject数据的字段类型

hailongwang


Schema 不太确定的话,那么下游怎么用这个数据呢?


Best,
Hailong

在 2020-12-07 15:21:16,"xiao cai" <[hidden email]> 写道:

>ROW需要写明具体的字段类型,比如:
>ROW<`id` string, …>,但是我并没有办法知道jsonObject中具体的schema
>
>
> Original Message
>Sender: 李轲<[hidden email]>
>Recipient: user-zh<[hidden email]>
>Date: Monday, Dec 7, 2020 16:14
>Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型
>
>
>可以试试ROW 发自我的iPhone > 在 2020年12月7日,15:43,xiao cai <[hidden email]> 写道: > > String不行,取出来的值是null > > > Original Message > Sender: silence<[hidden email]> > Recipient: user-zh<[hidden email]> > Date: Monday, Dec 7, 2020 14:26 > Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型 > > > 可以用string -- Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: Re: FlinkSQL如何定义JsonObject数据的字段类型

nobleyd
flink sql 支持不了这个需要。最多支持到Map,Map内部继续嵌套是不支持的。

hailongwang <[hidden email]> 于2020年12月7日周一 下午8:03写道:

>
>
> Schema 不太确定的话,那么下游怎么用这个数据呢?
>
>
> Best,
> Hailong
>
> 在 2020-12-07 15:21:16,"xiao cai" <[hidden email]> 写道:
> >ROW需要写明具体的字段类型,比如:
> >ROW<`id` string, …>,但是我并没有办法知道jsonObject中具体的schema
> >
> >
> > Original Message
> >Sender: 李轲<[hidden email]>
> >Recipient: user-zh<[hidden email]>
> >Date: Monday, Dec 7, 2020 16:14
> >Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型
> >
> >
> >可以试试ROW 发自我的iPhone > 在 2020年12月7日,15:43,xiao cai <[hidden email]> 写道: >
> > String不行,取出来的值是null > > > Original Message > Sender: silence<
> [hidden email]> > Recipient: user-zh<[hidden email]>
> > Date: Monday, Dec 7, 2020 14:26 > Subject: Re:
> FlinkSQL如何定义JsonObject数据的字段类型 > > > 可以用string -- Sent from:
> http://apache-flink.147419.n8.nabble.com/
>
Reply | Threaded
Open this post in threaded view
|

Re: Re: FlinkSQL如何定义JsonObject数据的字段类型

xiao cai
In reply to this post by xiao cai
如果我只是想要返回jsonObject.toString的内容呢?不需要解析嵌套结构


 Original Message
Sender: 赵一旦<[hidden email]>
Recipient: user-zh<[hidden email]>
Date: Monday, Dec 7, 2020 21:13
Subject: Re: Re: FlinkSQL如何定义JsonObject数据的字段类型


flink sql 支持不了这个需要。最多支持到Map,Map内部继续嵌套是不支持的。 hailongwang <[hidden email]> 于2020年12月7日周一 下午8:03写道: > > > Schema 不太确定的话,那么下游怎么用这个数据呢? > > > Best, > Hailong > > 在 2020-12-07 15:21:16,"xiao cai" <[hidden email]> 写道: > >ROW需要写明具体的字段类型,比如: > >ROW<`id` string, …>,但是我并没有办法知道jsonObject中具体的schema > > > > > > Original Message > >Sender: 李轲<[hidden email]> > >Recipient: user-zh<[hidden email]> > >Date: Monday, Dec 7, 2020 16:14 > >Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型 > > > > > >可以试试ROW 发自我的iPhone > 在 2020年12月7日,15:43,xiao cai <[hidden email]> 写道: > > > String不行,取出来的值是null > > > Original Message > Sender: silence< > [hidden email]> > Recipient: user-zh<[hidden email]> > > Date: Monday, Dec 7, 2020 14:26 > Subject: Re: > FlinkSQL如何定义JsonObject数据的字段类型 > > > 可以用string -- Sent from: > http://apache-flink.147419.n8.nabble.com/ >
Reply | Threaded
Open this post in threaded view
|

Re: Re: FlinkSQL如何定义JsonObject数据的字段类型

nobleyd
貌似也不行。推荐你把context细化,一层一层细化,直到某个字段为单层Map的时候使用Map。
即放弃部分数据的灵活性,完全的无限嵌套是不行的。

xiao cai <[hidden email]> 于2020年12月7日周一 下午9:33写道:

> 如果我只是想要返回jsonObject.toString的内容呢?不需要解析嵌套结构
>
>
>  Original Message
> Sender: 赵一旦<[hidden email]>
> Recipient: user-zh<[hidden email]>
> Date: Monday, Dec 7, 2020 21:13
> Subject: Re: Re: FlinkSQL如何定义JsonObject数据的字段类型
>
>
> flink sql 支持不了这个需要。最多支持到Map,Map内部继续嵌套是不支持的。 hailongwang <
> [hidden email]> 于2020年12月7日周一 下午8:03写道: > > > Schema
> 不太确定的话,那么下游怎么用这个数据呢? > > > Best, > Hailong > > 在 2020-12-07 15:21:16,"xiao
> cai" <[hidden email]> 写道: > >ROW需要写明具体的字段类型,比如: > >ROW<`id` string,
> …>,但是我并没有办法知道jsonObject中具体的schema > > > > > > Original Message > >Sender:
> 李轲<[hidden email]> > >Recipient: user-zh<[hidden email]>
> > >Date: Monday, Dec 7, 2020 16:14 > >Subject: Re:
> FlinkSQL如何定义JsonObject数据的字段类型 > > > > > >可以试试ROW 发自我的iPhone > 在
> 2020年12月7日,15:43,xiao cai <[hidden email]> 写道: > > >
> String不行,取出来的值是null > > > Original Message > Sender: silence< >
> [hidden email]> > Recipient: user-zh<[hidden email]>
> > > Date: Monday, Dec 7, 2020 14:26 > Subject: Re: >
> FlinkSQL如何定义JsonObject数据的字段类型 > > > 可以用string -- Sent from: >
> http://apache-flink.147419.n8.nabble.com/ >
Reply | Threaded
Open this post in threaded view
|

Re:Re: FlinkSQL如何定义JsonObject数据的字段类型

hailongwang
In reply to this post by xiao cai
理论上定义成 String 是可以拿到这个 JsonObject string 的值的。你调试看看为什么为 null?
如果确定为 null 的话,这个应该是 1.11 的一个 bug。
PS:我在 1.12 上测试了下,嵌套的定义成 String 可以拿到这个值。




在 2020-12-07 14:42:12,"xiao cai" <[hidden email]> 写道:

>String不行,取出来的值是null
>
>
> Original Message
>Sender: silence<[hidden email]>
>Recipient: user-zh<[hidden email]>
>Date: Monday, Dec 7, 2020 14:26
>Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型
>
>
>可以用string -- Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

wxpcc
In reply to this post by xiao cai
可以使用字符串的方式,或者自定义 String类型format,内部结构再通过udf去做后续的实现



--
Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

Jark
Administrator
hailong 说的定义成 STRING 是在1.12 版本上支持的,
https://issues.apache.org/jira/browse/FLINK-18002

1.12 这两天就会发布,如果能升级的话,可以尝试一下。

Best,
Jark

On Tue, 8 Dec 2020 at 11:56, wxpcc <[hidden email]> wrote:

> 可以使用字符串的方式,或者自定义 String类型format,内部结构再通过udf去做后续的实现
>
>
>
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

nobleyd
@JarkWu,你的意思是定义成string,但是输入数据是一个json object也可以支持?这岂不是需要对json部分的反序列化做特殊定制。

比如a字段是string,但数据中a属性是这样的:
"a":{  .. }。在java中相当于需要先将a这部分反序列化为一个map,然后再序列化为json(字符串)后作为a这个string的值。
?是吗。

Jark Wu <[hidden email]> 于2020年12月8日周二 下午1:42写道:

> hailong 说的定义成 STRING 是在1.12 版本上支持的,
> https://issues.apache.org/jira/browse/FLINK-18002
>
> 1.12 这两天就会发布,如果能升级的话,可以尝试一下。
>
> Best,
> Jark
>
> On Tue, 8 Dec 2020 at 11:56, wxpcc <[hidden email]> wrote:
>
> > 可以使用字符串的方式,或者自定义 String类型format,内部结构再通过udf去做后续的实现
> >
> >
> >
> > --
> > Sent from: http://apache-flink.147419.n8.nabble.com/
>
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

xiao cai
In reply to this post by xiao cai
好的,计划下周升级测试下,另:1.12.1计划何时发布呢


 Original Message
Sender: Jark Wu<[hidden email]>
Recipient: user-zh<[hidden email]>
Date: Tuesday, Dec 8, 2020 13:41
Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型


hailong 说的定义成 STRING 是在1.12 版本上支持的, https://issues.apache.org/jira/browse/FLINK-18002 1.12 这两天就会发布,如果能升级的话,可以尝试一下。 Best, Jark On Tue, 8 Dec 2020 at 11:56, wxpcc <[hidden email]> wrote: > 可以使用字符串的方式,或者自定义 String类型format,内部结构再通过udf去做后续的实现 > > > > -- > Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

Jark
Administrator
Hi 赵一旦,

这部分 jackson 组件已经自动处理了这部分逻辑。

Hi xiaocai,

 你有什么 issue 是需要1.12.1的? 1.12.0 这两天即将发布。

Best,
Jark


On Wed, 9 Dec 2020 at 14:34, xiao cai <[hidden email]> wrote:

> 好的,计划下周升级测试下,另:1.12.1计划何时发布呢
>
>
>  Original Message
> Sender: Jark Wu<[hidden email]>
> Recipient: user-zh<[hidden email]>
> Date: Tuesday, Dec 8, 2020 13:41
> Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型
>
>
> hailong 说的定义成 STRING 是在1.12 版本上支持的,
> https://issues.apache.org/jira/browse/FLINK-18002 1.12
> 这两天就会发布,如果能升级的话,可以尝试一下。 Best, Jark On Tue, 8 Dec 2020 at 11:56, wxpcc <
> [hidden email]> wrote: > 可以使用字符串的方式,或者自定义
> String类型format,内部结构再通过udf去做后续的实现 > > > > -- > Sent from:
> http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

xiao cai
In reply to this post by xiao cai
Hi  Jark


 Original Message
Sender: Jark Wu<[hidden email]>
Recipient: user-zh<[hidden email]>
Date: Wednesday, Dec 9, 2020 14:40
Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型


Hi 赵一旦, 这部分 jackson 组件已经自动处理了这部分逻辑。 Hi xiaocai, 你有什么 issue 是需要1.12.1的? 1.12.0 这两天即将发布。 Best, Jark On Wed, 9 Dec 2020 at 14:34, xiao cai <[hidden email]> wrote: > 好的,计划下周升级测试下,另:1.12.1计划何时发布呢 > > > Original Message > Sender: Jark Wu<[hidden email]> > Recipient: user-zh<[hidden email]> > Date: Tuesday, Dec 8, 2020 13:41 > Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型 > > > hailong 说的定义成 STRING 是在1.12 版本上支持的, > https://issues.apache.org/jira/browse/FLINK-18002 1.12 > 这两天就会发布,如果能升级的话,可以尝试一下。 Best, Jark On Tue, 8 Dec 2020 at 11:56, wxpcc < > [hidden email]> wrote: > 可以使用字符串的方式,或者自定义 > String类型format,内部结构再通过udf去做后续的实现 > > > > -- > Sent from: > http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

xiao cai
In reply to this post by xiao cai
Hi Jark
sorry,是1.12.0, 我打错了


 Original Message
Sender: Jark Wu<[hidden email]>
Recipient: user-zh<[hidden email]>
Date: Wednesday, Dec 9, 2020 14:40
Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型


Hi 赵一旦, 这部分 jackson 组件已经自动处理了这部分逻辑。 Hi xiaocai, 你有什么 issue 是需要1.12.1的? 1.12.0 这两天即将发布。 Best, Jark On Wed, 9 Dec 2020 at 14:34, xiao cai <[hidden email]> wrote: > 好的,计划下周升级测试下,另:1.12.1计划何时发布呢 > > > Original Message > Sender: Jark Wu<[hidden email]> > Recipient: user-zh<[hidden email]> > Date: Tuesday, Dec 8, 2020 13:41 > Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型 > > > hailong 说的定义成 STRING 是在1.12 版本上支持的, > https://issues.apache.org/jira/browse/FLINK-18002 1.12 > 这两天就会发布,如果能升级的话,可以尝试一下。 Best, Jark On Tue, 8 Dec 2020 at 11:56, wxpcc < > [hidden email]> wrote: > 可以使用字符串的方式,或者自定义 > String类型format,内部结构再通过udf去做后续的实现 > > > > -- > Sent from: > http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: FlinkSQL如何定义JsonObject数据的字段类型

Jark
Administrator
嗯 1.12.0 这两天就会发布。

On Wed, 9 Dec 2020 at 14:45, xiao cai <[hidden email]> wrote:

> Hi Jark
> sorry,是1.12.0, 我打错了
>
>
>  Original Message
> Sender: Jark Wu<[hidden email]>
> Recipient: user-zh<[hidden email]>
> Date: Wednesday, Dec 9, 2020 14:40
> Subject: Re: FlinkSQL如何定义JsonObject数据的字段类型
>
>
> Hi 赵一旦, 这部分 jackson 组件已经自动处理了这部分逻辑。 Hi xiaocai, 你有什么 issue 是需要1.12.1的?
> 1.12.0 这两天即将发布。 Best, Jark On Wed, 9 Dec 2020 at 14:34, xiao cai <
> [hidden email]> wrote: > 好的,计划下周升级测试下,另:1.12.1计划何时发布呢 > > > Original
> Message > Sender: Jark Wu<[hidden email]> > Recipient: user-zh<
> [hidden email]> > Date: Tuesday, Dec 8, 2020 13:41 > Subject:
> Re: FlinkSQL如何定义JsonObject数据的字段类型 > > > hailong 说的定义成 STRING 是在1.12 版本上支持的,
> > https://issues.apache.org/jira/browse/FLINK-18002 1.12 >
> 这两天就会发布,如果能升级的话,可以尝试一下。 Best, Jark On Tue, 8 Dec 2020 at 11:56, wxpcc < >
> [hidden email]> wrote: > 可以使用字符串的方式,或者自定义 >
> String类型format,内部结构再通过udf去做后续的实现 > > > > -- > Sent from: >
> http://apache-flink.147419.n8.nabble.com/