赞
踩
Flink在大数据处理上,是流批一体的框架,针对于各种场景下的数据处理,也有一套Flink SQL的操作思路。今天的大数据开发学习分享,我们就来讲讲基本的Flink SQL快速入门。
Flink SQL,就是直接可以在代码中写SQL,来实现一些查询(Query)操作。Flink的SQL支持,基于实现了SQL标准的Apache Calcite(Apache开源SQL解析工具)。
1、导入所需要的的依赖包
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-planner_2.12</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-api-scala-bridge_2.12</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-csv</artifactId>
<version>1.10.1</version>
</dependency>
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框架下去理解和运用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。