关于flink sql的数据类型

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

关于flink sql的数据类型

nobleyd
今天做个测试,发现一些类型的特点,想确认下。

目前来看,kafka数据的2个配置,(1)不存在字段设置null(2)解析错误忽略。


发现如下几个特征
(1)顶层字段字符串情况,实际数据为 "a": "a" 合法,"a":12不合法。
(2)非顶层字段,比如d map<String,String>,d中的字段 "b": 12则是合法的。
(3)t字段为bigint类型,并且由此衍生了eventtime。
         如果数据为 t: abc 则数据直接非法被忽略。
         如果数据为t: "abc",则t被转为null?  当然eventtime本身还有个不可null的限制,我通过COALESCE解决了。


想知道有没有什么规则,尽可能避免任务失败的。因为数据一旦有一点异常导致失败就会很麻烦。

比如那个忽略错误,实际是无法解决event time为null的情况的这种错误的。
我是通过COALESCE解决的。
Reply | Threaded
Open this post in threaded view
|

Re: 关于flink sql的数据类型

nobleyd
而且按照string无法接受"a":a,bigint在 "t":"as"情况下会为null。
这么来看,bigint反而比string还通用了,可以将非法数据通过null录入进来。
string方式反而丢失部分信息了还。

赵一旦 <[hidden email]> 于2020年9月25日周五 上午10:57写道:

> 今天做个测试,发现一些类型的特点,想确认下。
>
> 目前来看,kafka数据的2个配置,(1)不存在字段设置null(2)解析错误忽略。
>
>
> 发现如下几个特征
> (1)顶层字段字符串情况,实际数据为 "a": "a" 合法,"a":12不合法。
> (2)非顶层字段,比如d map<String,String>,d中的字段 "b": 12则是合法的。
> (3)t字段为bigint类型,并且由此衍生了eventtime。
>          如果数据为 t: abc 则数据直接非法被忽略。
>          如果数据为t: "abc",则t被转为null?
> 当然eventtime本身还有个不可null的限制,我通过COALESCE解决了。
>
>
> 想知道有没有什么规则,尽可能避免任务失败的。因为数据一旦有一点异常导致失败就会很麻烦。
>
> 比如那个忽略错误,实际是无法解决event time为null的情况的这种错误的。
> 我是通过COALESCE解决的。
>
Reply | Threaded
Open this post in threaded view
|

Re: 关于flink sql的数据类型

Benchao Li-2
你用的是哪个版本?1.11版本应该是改进过这块,不应该出现这个情况。

赵一旦 <[hidden email]> 于2020年9月25日周五 上午11:02写道:

> 而且按照string无法接受"a":a,bigint在 "t":"as"情况下会为null。
> 这么来看,bigint反而比string还通用了,可以将非法数据通过null录入进来。
> string方式反而丢失部分信息了还。
>
> 赵一旦 <[hidden email]> 于2020年9月25日周五 上午10:57写道:
>
> > 今天做个测试,发现一些类型的特点,想确认下。
> >
> > 目前来看,kafka数据的2个配置,(1)不存在字段设置null(2)解析错误忽略。
> >
> >
> > 发现如下几个特征
> > (1)顶层字段字符串情况,实际数据为 "a": "a" 合法,"a":12不合法。
> > (2)非顶层字段,比如d map<String,String>,d中的字段 "b": 12则是合法的。
> > (3)t字段为bigint类型,并且由此衍生了eventtime。
> >          如果数据为 t: abc 则数据直接非法被忽略。
> >          如果数据为t: "abc",则t被转为null?
> > 当然eventtime本身还有个不可null的限制,我通过COALESCE解决了。
> >
> >
> > 想知道有没有什么规则,尽可能避免任务失败的。因为数据一旦有一点异常导致失败就会很麻烦。
> >
> > 比如那个忽略错误,实际是无法解决event time为null的情况的这种错误的。
> > 我是通过COALESCE解决的。
> >
>


--

Best,
Benchao Li
Reply | Threaded
Open this post in threaded view
|

Re: 关于flink sql的数据类型

nobleyd
我基于1.11测试的。目前来看,json format的2个设置都设置好。然后event
time部分使用COALESCE将null情况设置为event_time 0。这么做是最好的情况啦。

Benchao Li <[hidden email]> 于2020年9月25日周五 下午2:08写道:

> 你用的是哪个版本?1.11版本应该是改进过这块,不应该出现这个情况。
>
> 赵一旦 <[hidden email]> 于2020年9月25日周五 上午11:02写道:
>
> > 而且按照string无法接受"a":a,bigint在 "t":"as"情况下会为null。
> > 这么来看,bigint反而比string还通用了,可以将非法数据通过null录入进来。
> > string方式反而丢失部分信息了还。
> >
> > 赵一旦 <[hidden email]> 于2020年9月25日周五 上午10:57写道:
> >
> > > 今天做个测试,发现一些类型的特点,想确认下。
> > >
> > > 目前来看,kafka数据的2个配置,(1)不存在字段设置null(2)解析错误忽略。
> > >
> > >
> > > 发现如下几个特征
> > > (1)顶层字段字符串情况,实际数据为 "a": "a" 合法,"a":12不合法。
> > > (2)非顶层字段,比如d map<String,String>,d中的字段 "b": 12则是合法的。
> > > (3)t字段为bigint类型,并且由此衍生了eventtime。
> > >          如果数据为 t: abc 则数据直接非法被忽略。
> > >          如果数据为t: "abc",则t被转为null?
> > > 当然eventtime本身还有个不可null的限制,我通过COALESCE解决了。
> > >
> > >
> > > 想知道有没有什么规则,尽可能避免任务失败的。因为数据一旦有一点异常导致失败就会很麻烦。
> > >
> > > 比如那个忽略错误,实际是无法解决event time为null的情况的这种错误的。
> > > 我是通过COALESCE解决的。
> > >
> >
>
>
> --
>
> Best,
> Benchao Li
>
Reply | Threaded
Open this post in threaded view
|

Re: 关于flink sql的数据类型

Benchao Li-2
1.11的话,
string类型是允许:"a":"abc" 和 "a": 123这两种形式的
bigint类型的话:"a": 123 和 "a": "123"也都是合法的

默认如果是字段不存在,会用null来表示;
如果字段解析错误,会抛异常,如果配置了ignoreParseError,则会忽略整条数据。

不知道你上面提到的(1)是怎么测出来的,方便把具体的DDL定义和示例数据贴一下吗?

赵一旦 <[hidden email]> 于2020年9月25日周五 下午2:52写道:

> 我基于1.11测试的。目前来看,json format的2个设置都设置好。然后event
> time部分使用COALESCE将null情况设置为event_time 0。这么做是最好的情况啦。
>
> Benchao Li <[hidden email]> 于2020年9月25日周五 下午2:08写道:
>
> > 你用的是哪个版本?1.11版本应该是改进过这块,不应该出现这个情况。
> >
> > 赵一旦 <[hidden email]> 于2020年9月25日周五 上午11:02写道:
> >
> > > 而且按照string无法接受"a":a,bigint在 "t":"as"情况下会为null。
> > > 这么来看,bigint反而比string还通用了,可以将非法数据通过null录入进来。
> > > string方式反而丢失部分信息了还。
> > >
> > > 赵一旦 <[hidden email]> 于2020年9月25日周五 上午10:57写道:
> > >
> > > > 今天做个测试,发现一些类型的特点,想确认下。
> > > >
> > > > 目前来看,kafka数据的2个配置,(1)不存在字段设置null(2)解析错误忽略。
> > > >
> > > >
> > > > 发现如下几个特征
> > > > (1)顶层字段字符串情况,实际数据为 "a": "a" 合法,"a":12不合法。
> > > > (2)非顶层字段,比如d map<String,String>,d中的字段 "b": 12则是合法的。
> > > > (3)t字段为bigint类型,并且由此衍生了eventtime。
> > > >          如果数据为 t: abc 则数据直接非法被忽略。
> > > >          如果数据为t: "abc",则t被转为null?
> > > > 当然eventtime本身还有个不可null的限制,我通过COALESCE解决了。
> > > >
> > > >
> > > > 想知道有没有什么规则,尽可能避免任务失败的。因为数据一旦有一点异常导致失败就会很麻烦。
> > > >
> > > > 比如那个忽略错误,实际是无法解决event time为null的情况的这种错误的。
> > > > 我是通过COALESCE解决的。
> > > >
> > >
> >
> >
> > --
> >
> > Best,
> > Benchao Li
> >
>


--

Best,
Benchao Li