zoukankan      html  css  js  c++  java
  • Flink基础(十六):Table API 和 Flink SQL(一)整体介绍

    什么是Table API和Flink SQL

    Flink本身是批流统一的处理框架,所以Table API和SQL,就是批流统一的上层处理API。目前功能尚未完善,处于活跃的开发阶段。

    Table API是一套内嵌在Java和Scala语言中的查询API,它允许我们以非常直观的方式,组合来自一些关系运算符的查询(比如select、filter和join)。而对于Flink SQL,就是直接可以在代码中写SQL,来实现一些查询(Query)操作。Flink的SQL支持,基于实现了SQL标准的Apache Calcite(Apache开源SQL解析工具)。

    无论输入是批输入还是流式输入,在这两套API中,指定的查询都具有相同的语义,得到相同的结果。

    需要引入的依赖

    取决于你使用的编程语言,比如这里,我们选择 Scala API 来构建你的 Table API 和 SQL 程序:

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-table-api-scala-bridge_2.11</artifactId>
      <version>1.11.0</version>
      <scope>provided</scope>
    </dependency>

    除此之外,如果你想在 IDE 本地运行你的程序,你需要添加下面的模块,具体用哪个取决于你使用哪个 Planner,我们这里选择使用 blink planner:

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-table-planner-blink_2.11</artifactId>
      <version>1.11.0</version>
      <scope>provided</scope>
    </dependency>

    如果你想实现自定义格式来解析 Kafka 数据,或者自定义函数,使用下面的依赖:

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-table-common</artifactId>
      <version>1.11.0</version>
      <scope>provided</scope>
    </dependency>
    • flink-table-planner-blink:planner计划器,是table API最主要的部分,提供了运行时环境和生成程序执行计划的planner;
    • flink-table-api-scala-bridge:bridge桥接器,主要负责table API和 DataStream/DataSet API的连接支持,按照语言分java和scala。

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

    需要注意的是:flink table本身有两个 planner 计划器,在flink 1.11之后,已经默认使用 blink planner,如果想了解 old planner,可以查阅官方文档。

    两种planner(old & blink)的区别

    1. 批流统一:Blink将批处理作业,视为流式处理的特殊情况。所以,blink不支持表和DataSet之间的转换,批处理作业将不转换为DataSet应用程序,而是跟流处理一样,转换为DataStream程序来处理。
    2. 因为批流统一,Blink planner也不支持BatchTableSource,而使用有界的StreamTableSource代替。
    3. Blink planner只支持全新的目录,不支持已弃用的ExternalCatalog。
    4. 旧planner和Blink planner的FilterableTableSource实现不兼容。旧的planner会把PlannerExpressions下推到filterableTableSource中,而blink planner则会把Expressions下推。
    5. 基于字符串的键值配置选项仅适用于Blink planner。
    6. PlannerConfig在两个planner中的实现不同。
    7. Blink planner会将多个sink优化在一个DAG中(仅在TableEnvironment上受支持,而在StreamTableEnvironment上不受支持)。而旧planner的优化总是将每一个sink放在一个新的DAG中,其中所有DAG彼此独立。
    8. 旧的planner不支持目录统计,而Blink planner支持。

    本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/13433196.html

  • 相关阅读:
    [办公自动化]Excel表格求和始终显示#VALUE!
    Excel中如何对IP地址排序(linux 中呢?用sort)
    勇士通关——记多年前的面试
    [听听音乐]路,李知蹊
    [办公自动化]PPT演示时加个动画倒计时
    [网络安全]burp 转换ascii编码
    [学习笔记]掌控安全的课程学习笔记:20191228
    [生活随笔]起死回生的九阳破壁机
    [IT新应用]如何拯救死机的苹果手机(iPhone X)
    八月份课堂--Python爬虫(Spider)基础
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13433196.html
Copyright © 2011-2022 走看看