北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-9090FlinkTableAPI和FlinkSQL的全面解析1.整体概述1.1什么是TableAPI和FlinkSQLApacheFlink是批流统一的处理框架,具有两个关系API-TableAPI和SQL-用于统一流和批处理的上层API。TableAPI是Java,Scala和Python的语言集成查询API,它允许以非常直观的方式组合来自关系运算符(例如选择,过滤和联接)的查询。Flink的SQL就是可以在代码中写sql,实现一些查询操作,支持基于实现SQL标准的ApacheCalcite(Apache开源SQL解析工具)。无论输入是连续的(流式)还是有界的(批处理),在两个接口中指定的查询都具有相同的语义,并指定相同的结果。StatefulStreamProcessingDataStream/DataSetAPITableAPISQLCoreAPIsDeclarativeDSLHigh-levelLanguageLow-levelbuildingblock(streams,state,[event]time)官网介绍:https://ci.apache.org/projects/flink/flink-docs-release-1.13/zh/docs/dev/table/overview/北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-90901.2为什么需要TableAPI&SQL声明式:属于设定式语言,用户只要表达清楚需求即可,不需要了解底层执行;高性能:可优化,内置多种查询优化器,这些查询优化器可为SQL翻译出最优执行计划;简单易学:易于理解,不同行业和领域的人都懂,学习成本较低;标准稳定:语义遵循SQL标准,非常稳定,在数据库30多年的历史中,SQL本身变化较少;流批统一:可以做到API层面上流与批的统一,相同的SQL逻辑,既可流模式运行,也可批模式运行,Flink底层Runtime本身就是一个流与批统一的引擎1.3TableAPI&SQL发展历程架构升级自2015年开始,阿里巴巴开始调研开源流计算引擎,最终决定基于Flink打造新一代计算引擎,针对Flink存在的不足进行优化和改进,并且在2019年初将最终代码开源,也就是Blink。Blink在原来的Flink基础上最显著的一个贡献就是FlinkSQL的实现。随着版本的不断更新,API也出现了很多不兼容的地方。在Flink1.9中,Table模块迎来了核心架构的升级,引入了阿里巴巴Blink团队贡献的诸多功能北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-9090图示,在Flink1.9之前,FlinkAPI层一直分为DataStreamAPI和DataSetAPI,TableAPI&SQL位于DataStreamAPI和DataSetAPI之上。可以看出流处理和批处理有各自独立的api(流处理DataStream,批处理DataSet)。而且有不同的执行计划解析过程,codegen过程也完全不一样,完全没有流批...