关于FlinkSQL的一些最佳实践咨询

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

关于FlinkSQL的一些最佳实践咨询

Zhao,Yi(SEC)
最近刚刚开始研究FlinkSQL,之前一直用的DataStream API,现在想尝试下FlinkSQL的玩法。
目前简单看下来,感觉相对来说相比DataStream API不够灵活,所以有一些实践疑问咨询下。

(1)     通常Kafka的动态表会通过临时表的方式写在程序开头声明定义呢?还是直接写在sql-client的配置文件中呢。

如果写在配置文件,好处是类似于一个固化的表定义一样,每次执行sql-client的cli之后可以马上查询相关数据。但是有个问题是这种情况下kafka设置读取earliest还是latest?貌似根据具体查询需求临时改配置好像也不是很方便。

写临时表是不是更常用?比如你这个程序目的就是读取指定时间开始的数据,那就在代码中定义这个临时表的时候就指定了offset。如果是需要从最早开始读,代码中定义临时表就定义为最早。

(2)     FlinkSQL生产中,主要是通过代码方式执行呢?还是将相关jar都放好到固定的机器,然后每次sql-client的命令行进去,然后执行一些sql(提交任务)。

(3)     代码中,直接sql api常用呢?还是table api常用呢?哪个更推荐?包括表的定义也有sql ddl方式,以及table api提供的一套方式。以及DML也一样,table api提供了一套更加面向对象的语法,sql api则提供了更高层次的抽象,同时类sql(技能栈更通用)。

(4)     Flink-json这种格式包一般打包到任务jar中?还是提前放到sql-client的相关lib中?哪个更推荐。还有各种connector。

今天有个实验,报错就是没这些包,加了lib就ok啦。这个有一点不是很懂,是这些包仅client需要,还是说我通过sql-client.sh 的-l参数指定的lib目录会被动态上传到集群呢?毕竟这些包我并没有手动上传到集群,只是在client端游,并通过-l指定之后就ok可用了。

(5)     在Hive中实践,更多的是提前定义好的各种表结构,然后策略同学直接写sql做各种数据查询和分析。在FlinkSQL场景下,是不是每个代码中定义自己的临时表更常见呢?毕竟有Kafka这种动态表,每次启动一个任务的开始消费位置可能也不一样。
Reply | Threaded
Open this post in threaded view
|

Re: 关于FlinkSQL的一些最佳实践咨询

Zhao,Yi(SEC)
没有小伙伴帮忙看下这个问题吗。可以优先看下第2、3、4个问题。

其他问题,第1/5个问题,我自己大概感觉,直接使用memory catalog就ok啦。我看了下FlinkSQL好像没有临时表的概念。10个SQL开10个sql-client的session,各个session独享自己的memory catalog,创建的表也类似于临时表的效果。

发件人: "Zhao,Yi(SEC)" <[hidden email]>
日期: 2020年8月12日 星期三 下午2:20
收件人: "[hidden email]" <[hidden email]>
主题: 关于FlinkSQL的一些最佳实践咨询

最近刚刚开始研究FlinkSQL,之前一直用的DataStream API,现在想尝试下FlinkSQL的玩法。
目前简单看下来,感觉相对来说相比DataStream API不够灵活,所以有一些实践疑问咨询下。

(1)     通常Kafka的动态表会通过临时表的方式写在程序开头声明定义呢?还是直接写在sql-client的配置文件中呢。

如果写在配置文件,好处是类似于一个固化的表定义一样,每次执行sql-client的cli之后可以马上查询相关数据。但是有个问题是这种情况下kafka设置读取earliest还是latest?貌似根据具体查询需求临时改配置好像也不是很方便。

写临时表是不是更常用?比如你这个程序目的就是读取指定时间开始的数据,那就在代码中定义这个临时表的时候就指定了offset。如果是需要从最早开始读,代码中定义临时表就定义为最早。

(2)     FlinkSQL生产中,主要是通过代码方式执行呢?还是将相关jar都放好到固定的机器,然后每次sql-client的命令行进去,然后执行一些sql(提交任务)。

(3)     代码中,直接sql api常用呢?还是table api常用呢?哪个更推荐?包括表的定义也有sql ddl方式,以及table api提供的一套方式。以及DML也一样,table api提供了一套更加面向对象的语法,sql api则提供了更高层次的抽象,同时类sql(技能栈更通用)。

(4)     Flink-json这种格式包一般打包到任务jar中?还是提前放到sql-client的相关lib中?哪个更推荐。还有各种connector。

今天有个实验,报错就是没这些包,加了lib就ok啦。这个有一点不是很懂,是这些包仅client需要,还是说我通过sql-client.sh 的-l参数指定的lib目录会被动态上传到集群呢?毕竟这些包我并没有手动上传到集群,只是在client端有,并通过-l指定之后就ok可用了。

(5)     在Hive中实践,更多的是提前定义好的各种表结构,然后策略同学直接写sql做各种数据查询和分析。在FlinkSQL场景下,是不是每个代码中定义自己的临时表更常见呢?毕竟有Kafka这种动态表,每次启动一个任务的开始消费位置可能也不一样。
Reply | Threaded
Open this post in threaded view
|

回复: 关于FlinkSQL的一些最佳实践咨询

jinyaqia
针对2, 我们公司采用的是通过提交一个解析flink sql的jar包,把sql作为jar包的参数来执行的。采用接口机将用户的udf jar包和平台提供的解析flink sql的jar包提交到集群。
针对3, 既然使用了flink sql,当然期望sql搞定一切了
针对4, 我们改造了下flink-client模块的一小块代码,支持提交多jar包到集群,所以connector那些包就通过这种方式上传了。当然提前放集群上面也是可以的。


| |
靳亚洽
|
|
[hidden email]
|
签名由网易邮箱大师定制


在2020年08月13日 10:17,Zhao,Yi(SEC)<[hidden email]> 写道:
没有小伙伴帮忙看下这个问题吗。可以优先看下第2、3、4个问题。

其他问题,第1/5个问题,我自己大概感觉,直接使用memory catalog就ok啦。我看了下FlinkSQL好像没有临时表的概念。10个SQL开10个sql-client的session,各个session独享自己的memory catalog,创建的表也类似于临时表的效果。

发件人: "Zhao,Yi(SEC)" <[hidden email]>
日期: 2020年8月12日 星期三 下午2:20
收件人: "[hidden email]" <[hidden email]>
主题: 关于FlinkSQL的一些最佳实践咨询

最近刚刚开始研究FlinkSQL,之前一直用的DataStream API,现在想尝试下FlinkSQL的玩法。
目前简单看下来,感觉相对来说相比DataStream API不够灵活,所以有一些实践疑问咨询下。

(1)     通常Kafka的动态表会通过临时表的方式写在程序开头声明定义呢?还是直接写在sql-client的配置文件中呢。

如果写在配置文件,好处是类似于一个固化的表定义一样,每次执行sql-client的cli之后可以马上查询相关数据。但是有个问题是这种情况下kafka设置读取earliest还是latest?貌似根据具体查询需求临时改配置好像也不是很方便。

写临时表是不是更常用?比如你这个程序目的就是读取指定时间开始的数据,那就在代码中定义这个临时表的时候就指定了offset。如果是需要从最早开始读,代码中定义临时表就定义为最早。

(2)     FlinkSQL生产中,主要是通过代码方式执行呢?还是将相关jar都放好到固定的机器,然后每次sql-client的命令行进去,然后执行一些sql(提交任务)。

(3)     代码中,直接sql api常用呢?还是table api常用呢?哪个更推荐?包括表的定义也有sql ddl方式,以及table api提供的一套方式。以及DML也一样,table api提供了一套更加面向对象的语法,sql api则提供了更高层次的抽象,同时类sql(技能栈更通用)。

(4)     Flink-json这种格式包一般打包到任务jar中?还是提前放到sql-client的相关lib中?哪个更推荐。还有各种connector。

今天有个实验,报错就是没这些包,加了lib就ok啦。这个有一点不是很懂,是这些包仅client需要,还是说我通过sql-client.sh 的-l参数指定的lib目录会被动态上传到集群呢?毕竟这些包我并没有手动上传到集群,只是在client端有,并通过-l指定之后就ok可用了。

(5)     在Hive中实践,更多的是提前定义好的各种表结构,然后策略同学直接写sql做各种数据查询和分析。在FlinkSQL场景下,是不是每个代码中定义自己的临时表更常见呢?毕竟有Kafka这种动态表,每次启动一个任务的开始消费位置可能也不一样。
Reply | Threaded
Open this post in threaded view
|

Re: 关于FlinkSQL的一些最佳实践咨询

Shengkai Fang
针对(3)社区建议使用sql api, table api现在正准备重构。

靳亚洽 <[hidden email]> 于2020年8月13日周四 上午11:00写道:

> 针对2, 我们公司采用的是通过提交一个解析flink sql的jar包,把sql作为jar包的参数来执行的。采用接口机将用户的udf
> jar包和平台提供的解析flink sql的jar包提交到集群。
> 针对3, 既然使用了flink sql,当然期望sql搞定一切了
> 针对4,
> 我们改造了下flink-client模块的一小块代码,支持提交多jar包到集群,所以connector那些包就通过这种方式上传了。当然提前放集群上面也是可以的。
>
>
> | |
> 靳亚洽
> |
> |
> [hidden email]
> |
> 签名由网易邮箱大师定制
>
>
> 在2020年08月13日 10:17,Zhao,Yi(SEC)<[hidden email]> 写道:
> 没有小伙伴帮忙看下这个问题吗。可以优先看下第2、3、4个问题。
>
> 其他问题,第1/5个问题,我自己大概感觉,直接使用memory
> catalog就ok啦。我看了下FlinkSQL好像没有临时表的概念。10个SQL开10个sql-client的session,各个session独享自己的memory
> catalog,创建的表也类似于临时表的效果。
>
> 发件人: "Zhao,Yi(SEC)" <[hidden email]>
> 日期: 2020年8月12日 星期三 下午2:20
> 收件人: "[hidden email]" <[hidden email]>
> 主题: 关于FlinkSQL的一些最佳实践咨询
>
> 最近刚刚开始研究FlinkSQL,之前一直用的DataStream API,现在想尝试下FlinkSQL的玩法。
> 目前简单看下来,感觉相对来说相比DataStream API不够灵活,所以有一些实践疑问咨询下。
>
> (1)     通常Kafka的动态表会通过临时表的方式写在程序开头声明定义呢?还是直接写在sql-client的配置文件中呢。
>
>
> 如果写在配置文件,好处是类似于一个固化的表定义一样,每次执行sql-client的cli之后可以马上查询相关数据。但是有个问题是这种情况下kafka设置读取earliest还是latest?貌似根据具体查询需求临时改配置好像也不是很方便。
>
>
> 写临时表是不是更常用?比如你这个程序目的就是读取指定时间开始的数据,那就在代码中定义这个临时表的时候就指定了offset。如果是需要从最早开始读,代码中定义临时表就定义为最早。
>
> (2)
>  FlinkSQL生产中,主要是通过代码方式执行呢?还是将相关jar都放好到固定的机器,然后每次sql-client的命令行进去,然后执行一些sql(提交任务)。
>
> (3)     代码中,直接sql api常用呢?还是table api常用呢?哪个更推荐?包括表的定义也有sql ddl方式,以及table
> api提供的一套方式。以及DML也一样,table api提供了一套更加面向对象的语法,sql
> api则提供了更高层次的抽象,同时类sql(技能栈更通用)。
>
> (4)
>  Flink-json这种格式包一般打包到任务jar中?还是提前放到sql-client的相关lib中?哪个更推荐。还有各种connector。
>
> 今天有个实验,报错就是没这些包,加了lib就ok啦。这个有一点不是很懂,是这些包仅client需要,还是说我通过sql-client.sh
> 的-l参数指定的lib目录会被动态上传到集群呢?毕竟这些包我并没有手动上传到集群,只是在client端有,并通过-l指定之后就ok可用了。
>
> (5)
>  在Hive中实践,更多的是提前定义好的各种表结构,然后策略同学直接写sql做各种数据查询和分析。在FlinkSQL场景下,是不是每个代码中定义自己的临时表更常见呢?毕竟有Kafka这种动态表,每次启动一个任务的开始消费位置可能也不一样。
>
Reply | Threaded
Open this post in threaded view
|

答复: 关于FlinkSQL的一些最佳实践咨询

zhao liang
请问table api要重构是哪个FLIP,我想关注下

发件人: Shengkai Fang <[hidden email]>
日期: 星期四, 2020年8月13日 11:09
收件人: [hidden email] <[hidden email]>
主题: Re: 关于FlinkSQL的一些最佳实践咨询
针对(3)社区建议使用sql api, table api现在正准备重构。

靳亚洽 <[hidden email]> 于2020年8月13日周四 上午11:00写道:

> 针对2, 我们公司采用的是通过提交一个解析flink sql的jar包,把sql作为jar包的参数来执行的。采用接口机将用户的udf
> jar包和平台提供的解析flink sql的jar包提交到集群。
> 针对3, 既然使用了flink sql,当然期望sql搞定一切了
> 针对4,
> 我们改造了下flink-client模块的一小块代码,支持提交多jar包到集群,所以connector那些包就通过这种方式上传了。当然提前放集群上面也是可以的。
>
>
> | |
> 靳亚洽
> |
> |
> [hidden email]
> |
> 签名由网易邮箱大师定制
>
>
> 在2020年08月13日 10:17,Zhao,Yi(SEC)<[hidden email]> 写道:
> 没有小伙伴帮忙看下这个问题吗。可以优先看下第2、3、4个问题。
>
> 其他问题,第1/5个问题,我自己大概感觉,直接使用memory
> catalog就ok啦。我看了下FlinkSQL好像没有临时表的概念。10个SQL开10个sql-client的session,各个session独享自己的memory
> catalog,创建的表也类似于临时表的效果。
>
> 发件人: "Zhao,Yi(SEC)" <[hidden email]>
> 日期: 2020年8月12日 星期三 下午2:20
> 收件人: "[hidden email]" <[hidden email]>
> 主题: 关于FlinkSQL的一些最佳实践咨询
>
> 最近刚刚开始研究FlinkSQL,之前一直用的DataStream API,现在想尝试下FlinkSQL的玩法。
> 目前简单看下来,感觉相对来说相比DataStream API不够灵活,所以有一些实践疑问咨询下。
>
> (1)     通常Kafka的动态表会通过临时表的方式写在程序开头声明定义呢?还是直接写在sql-client的配置文件中呢。
>
>
> 如果写在配置文件,好处是类似于一个固化的表定义一样,每次执行sql-client的cli之后可以马上查询相关数据。但是有个问题是这种情况下kafka设置读取earliest还是latest?貌似根据具体查询需求临时改配置好像也不是很方便。
>
>
> 写临时表是不是更常用?比如你这个程序目的就是读取指定时间开始的数据,那就在代码中定义这个临时表的时候就指定了offset。如果是需要从最早开始读,代码中定义临时表就定义为最早。
>
> (2)
>  FlinkSQL生产中,主要是通过代码方式执行呢?还是将相关jar都放好到固定的机器,然后每次sql-client的命令行进去,然后执行一些sql(提交任务)。
>
> (3)     代码中,直接sql api常用呢?还是table api常用呢?哪个更推荐?包括表的定义也有sql ddl方式,以及table
> api提供的一套方式。以及DML也一样,table api提供了一套更加面向对象的语法,sql
> api则提供了更高层次的抽象,同时类sql(技能栈更通用)。
>
> (4)
>  Flink-json这种格式包一般打包到任务jar中?还是提前放到sql-client的相关lib中?哪个更推荐。还有各种connector。
>
> 今天有个实验,报错就是没这些包,加了lib就ok啦。这个有一点不是很懂,是这些包仅client需要,还是说我通过sql-client.sh
> 的-l参数指定的lib目录会被动态上传到集群呢?毕竟这些包我并没有手动上传到集群,只是在client端有,并通过-l指定之后就ok可用了。
>
> (5)
>  在Hive中实践,更多的是提前定义好的各种表结构,然后策略同学直接写sql做各种数据查询和分析。在FlinkSQL场景下,是不是每个代码中定义自己的临时表更常见呢?毕竟有Kafka这种动态表,每次启动一个任务的开始消费位置可能也不一样。
>
Reply | Threaded
Open this post in threaded view
|

Re: 关于FlinkSQL的一些最佳实践咨询

Leonard Xu
FLIP-129
[1] https://cwiki.apache.org/confluence/display/FLINK/FLIP-129%3A+Refactor+Descriptor+API+to+register+connectors+in+Table+API <https://cwiki.apache.org/confluence/display/FLINK/FLIP-129:+Refactor+Descriptor+API+to+register+connectors+in+Table+API>

> 在 2020年8月13日,11:26,zhao liang <[hidden email]> 写道:
>
> 请问table api要重构是哪个FLIP,我想关注下
>
> 发件人: Shengkai Fang <[hidden email]>
> 日期: 星期四, 2020年8月13日 11:09
> 收件人: [hidden email] <[hidden email]>
> 主题: Re: 关于FlinkSQL的一些最佳实践咨询
> 针对(3)社区建议使用sql api, table api现在正准备重构。
>
> 靳亚洽 <[hidden email]> 于2020年8月13日周四 上午11:00写道:
>
>> 针对2, 我们公司采用的是通过提交一个解析flink sql的jar包,把sql作为jar包的参数来执行的。采用接口机将用户的udf
>> jar包和平台提供的解析flink sql的jar包提交到集群。
>> 针对3, 既然使用了flink sql,当然期望sql搞定一切了
>> 针对4,
>> 我们改造了下flink-client模块的一小块代码,支持提交多jar包到集群,所以connector那些包就通过这种方式上传了。当然提前放集群上面也是可以的。
>>
>>
>> | |
>> 靳亚洽
>> |
>> |
>> [hidden email]
>> |
>> 签名由网易邮箱大师定制
>>
>>
>> 在2020年08月13日 10:17,Zhao,Yi(SEC)<[hidden email]> 写道:
>> 没有小伙伴帮忙看下这个问题吗。可以优先看下第2、3、4个问题。
>>
>> 其他问题,第1/5个问题,我自己大概感觉,直接使用memory
>> catalog就ok啦。我看了下FlinkSQL好像没有临时表的概念。10个SQL开10个sql-client的session,各个session独享自己的memory
>> catalog,创建的表也类似于临时表的效果。
>>
>> 发件人: "Zhao,Yi(SEC)" <[hidden email]>
>> 日期: 2020年8月12日 星期三 下午2:20
>> 收件人: "[hidden email]" <[hidden email]>
>> 主题: 关于FlinkSQL的一些最佳实践咨询
>>
>> 最近刚刚开始研究FlinkSQL,之前一直用的DataStream API,现在想尝试下FlinkSQL的玩法。
>> 目前简单看下来,感觉相对来说相比DataStream API不够灵活,所以有一些实践疑问咨询下。
>>
>> (1)     通常Kafka的动态表会通过临时表的方式写在程序开头声明定义呢?还是直接写在sql-client的配置文件中呢。
>>
>>
>> 如果写在配置文件,好处是类似于一个固化的表定义一样,每次执行sql-client的cli之后可以马上查询相关数据。但是有个问题是这种情况下kafka设置读取earliest还是latest?貌似根据具体查询需求临时改配置好像也不是很方便。
>>
>>
>> 写临时表是不是更常用?比如你这个程序目的就是读取指定时间开始的数据,那就在代码中定义这个临时表的时候就指定了offset。如果是需要从最早开始读,代码中定义临时表就定义为最早。
>>
>> (2)
>> FlinkSQL生产中,主要是通过代码方式执行呢?还是将相关jar都放好到固定的机器,然后每次sql-client的命令行进去,然后执行一些sql(提交任务)。
>>
>> (3)     代码中,直接sql api常用呢?还是table api常用呢?哪个更推荐?包括表的定义也有sql ddl方式,以及table
>> api提供的一套方式。以及DML也一样,table api提供了一套更加面向对象的语法,sql
>> api则提供了更高层次的抽象,同时类sql(技能栈更通用)。
>>
>> (4)
>> Flink-json这种格式包一般打包到任务jar中?还是提前放到sql-client的相关lib中?哪个更推荐。还有各种connector。
>>
>> 今天有个实验,报错就是没这些包,加了lib就ok啦。这个有一点不是很懂,是这些包仅client需要,还是说我通过sql-client.sh
>> 的-l参数指定的lib目录会被动态上传到集群呢?毕竟这些包我并没有手动上传到集群,只是在client端有,并通过-l指定之后就ok可用了。
>>
>> (5)
>> 在Hive中实践,更多的是提前定义好的各种表结构,然后策略同学直接写sql做各种数据查询和分析。在FlinkSQL场景下,是不是每个代码中定义自己的临时表更常见呢?毕竟有Kafka这种动态表,每次启动一个任务的开始消费位置可能也不一样。
>>