大数据开发:Flink SQL快速入门

Flink在大数据处理上,是流批一体的框架,针对于各种场景下的数据处理,也有一套Flink SQL的操作思路。今天的大数据开发分享,我们就来讲讲基本的Flink SQL快速入门。

Flink SQL,就是直接可以在代码中写SQL,来实现一些查询(Query)操作。Flink的SQL支持,基于实现了SQL标准的Apache Calcite(Apache开源SQL解析工具)。

1、导入所需要的的依赖包

           org.apache.flink

           flink-table-planner_2.12

           1.10.1

      

      

           org.apache.flink

           flink-table-api-scala-bridge_2.12

           1.10.1

      

      

           org.apache.flink

           flink-csv

           1.10.1

     

flink-table-planner:planner计划器,是table API最主要的部分,提供了运行时环境和生成程序执行计划的planner;

flink-table-api-scala-bridge:bridge桥接器,主要负责table API和DataStream/DataSet API的连接支持,按照语言分java和scala。

这里的两个依赖,是IDE环境下运行需要添加的;如果是生产环境,lib目录下默认已经有了planner,就只需要有bridge就可以了。

当然,如果想使用用户自定义函数,或是跟kafka做连接,需要有一个SQL client,这个包含在flink-table-common里。

2、两种planner(old&blink)的区别

批流统一:Blink将批处理作业,视为流式处理的特殊情况。所以,blink不支持表和DataSet之间的转换,批处理作业将不转换为DataSet应用程序,而是跟流处理一样,转换为DataStream程序来处理。

因为批流统一,Blink planner也不支持BatchTableSource,而使用有界的Blink planner只支持全新的目录,不支持已弃用的ExternalCatalog。

旧planner和Blink planner的FilterableTableSource实现不兼容。旧的planner会把PlannerExpressions下推到filterableTableSource中,而blink planner则会把Expressions下推。

基于字符串的键值配置选项仅适用于Blink planner。

PlannerConfig在两个planner中的实现不同。

Blink planner会将多个sink优化在一个DAG中(仅在TableEnvironment上受支持,而在StreamTableEnvironment上不受支持)。而旧planner的优化总是将每一个sink放在一个新的DAG中,其中所有DAG彼此独立。

旧的planner不支持目录统计,而Blink planner支持。

3、表(Table)的概念

TableEnvironment可以注册目录Catalog,并可以基于Catalog注册表。它会维护一个Catalog-Table表之间的map。表(Table)是由一个标识符来指定的,由3部分组成:Catalog名、数据库(database)名和对象名(表名)。如果没有指定目录或数据库,就使用当前的默认值。

4、连接到文件系统(Csv格式)

连接外部系统在Catalog中注册表,直接调用tableEnv.connect()就可以,里面参数要传入一个ConnectorDescriptor,也就是connector描述器。对于文件系统的connector而言,flink内部已经提供了,就叫做FileSystem()。

关于大数据开发,Flink SQL快速入门,以上就为大家做了简单的介绍了。Flink SQL,其实与传统的SQL查询,大致也差不多,关键在于要学会在Flink框架下去理解和运用。

你可能感兴趣的:(大数据开发:Flink SQL快速入门)