Day79_Flink(五) FlinkSQL和CEP

课程大纲 课程内容 学习效果 掌握目标 FlinkSQL FlinkTable 掌握 FlinkSQL 掌握 FlinkCEP FlinkCEP 掌握 任务性能优化 ...
摘要由CSDN通过智能技术生成

课程大纲

课程内容

学习效果

掌握目标

FlinkSQL

FlinkTable

掌握

FlinkSQL

掌握

FlinkCEP

FlinkCEP

掌握

任务性能优化

operator chain

掌握

slot sharing

掌握

Flink异步IO

掌握

Checkpoint 优化

掌握

一、Table&SQL

(一)概述

Table API是流处理和批处理通用的关系型 API,Table API 可以基于流输入或者批输入来运行而不需要进行任何修改。Table API 是 SQL 语言的超集并专门为 Apache Flink 设计的,Table API 是 Scala 和 Java 语言集成式的 API。与常规 SQL 语言中将查询指定为字符串不同,Table API 查询是以 Java 或 Scala 中的语言嵌入样式来定义的,具有 IDE 支持如:自动完成和语法检测;允许以非常直观的方式组合关系运算符的查询,例如 select,filter 和 join。Flink SQL 的支持是基于实现了SQL标准的 Apache Calcite。无论输入是批输入(DataSet)还是流输入(DataStream),任一接口中指定的查询都具有相同的语义并指定相同的结果。

(二)、Table API

1、依赖

<!-- flink-table&sql -->

    <dependency>

    <groupId>org.apache.flink</groupId>

    <artifactId>flink-table</artifactId>

    <version>1.9.1</version>

    <type>pom</type>

    </dependency>

    <dependency>

    <groupId>org.apache.flink</groupId>

    <artifactId>flink-table-planner_2.11</artifactId>

    <version>1.9.1</version>

    </dependency>

    <dependency>

    <groupId>org.apache.flink</groupId>

    <artifactId>flink-table-api-java-bridge_2.11</artifactId>

    <version>1.9.1</version>

    </dependency>

    <dependency>

    <groupId>org.apache.flink</groupId>

    <artifactId>flink-table-api-scala-bridge_2.11</artifactId>

    <version>1.9.1</version>

    </dependency>
<dependency>

    <groupId>org.apache.flink</groupId>

    <artifactId>flink-table-api-scala-bridge_2.11</artifactId>

    <version>1.9.1</version>

    </dependency>

    <dependency>

    <groupId>org.apache.flink</groupId>

    <artifactId>flink-table-common</artifactId>

    <version>1.9.1</version>

    </dependency>



2、Table API

(1)、TableEnvironment

TableEnvironment 是 Table API 和SQL集成的核心概念,它负责:

  1. 在内部目录中注册表
  2. 注册外部目录
  3. 执行SQL查询
  4. 注册用户定义的函数
  5. DataStream 或 DataSet 转换为 Table
  6. 持有 ExecutionEnvironment 或 StreamExecutionEnvironment 的引用

Table总是与特定的TableEnvironment 绑定。不能在同一查询中组合不同 TableEnvironments 的表(例如,union 或 join)。创建 TableEnvironment:

// 基于流的tableEnv
val sEnv = StreamExecutionEnvironment.getExecutionEnvironment
// create a TableEnvironment for streaming queries
val sTableEnv = StreamTableEnvironment.create(sEnv)
// 基于批的bTableEnv
val bEnv: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
val bTableEnv: BatchTableEnvironment = BatchTableEnvironment.create(bEnv)

(2)、数据加载

数据加载通常有两种:一者基于流/批,一者基于TableSource,但是后者在Flink1.11中已经被废弃,所以不建议使用。

基于批

case class Student(id:Int,name:String,age:Int,gender:String,course:String,score:Int)
object FlinkBatchTableOps {
    def main(args: Array[String]): Unit = {
        //构建batch的executionEnvironment
        val env = ExecutionEnvironment.getExecutionEnvironment
        val bTEnv = BatchTableEnvironment.create(env)
 val dataSets: DataSet[Student] = env.readCsvFile[Student]("E:\\data\\student.csv",
            //是否忽略文件的第一行数据(主要考虑表头数据)
            ignoreFirstLin
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flink 中,Connector 是指用于与外部系统进行数据交互的组件。Connector 可以与各种外部系统进行交互,例如数据库、消息队列、文件系统等。Connector 的实现通常包括两个部分:Source 和 Sink。 在 Flink SQL 中,Connector 的定义和实现通常需要通过以下方式: 1. 导入相关依赖库:在 Flink SQL 中,需要导入对应的 Connector 的相关依赖库,例如 flink-connector-jdbc、flink-connector-kafka、flink-connector-hive 等。 2. 创建 Source 和 Sink:创建对应的 Source 和 Sink 组件,并实现相关的接口。例如,如果需要读取从 MySQL 数据库中的数据,需要创建对应的 MySQLSource,并实现 Source 接口。 3. 配置 Connector:对于每个 Connector,都需要进行相应的配置,包括连接信息、数据格式、数据读取方式等。例如,对于 MySQLSource,需要配置 MySQL 的连接信息、表名、字段名等。 4. 注册 Connector:将创建好的 Connector 注册到 Flink 中,以便在 SQL 查询中使用。可以通过 Flink 的 TableEnvironment 注册 Connector。 5. 在 SQL 查询中使用 Connector:使用 Flink SQL 编写查询语句,通过 FROM 子句指定使用的 Connector,并通过 SELECT 子句定义需要查询的数据。例如: ``` SELECT name, age, gender FROM MyTable, MySQLSource WHERE MyTable.id = MySQLSource.id; ``` 上述 SQL 查询中使用了 MyTable 和 MySQLSource 两个 Connector,其中 MyTable 是 Flink 内部的 Table,MySQLSource 是自定义的 Connector。 总之,Flink SQL 中的 Connector 提供了一种便捷的方式,可以方便地与外部系统进行数据交互,并且可以通过 SQL 查询语句实现复杂的数据处理和分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值