Flink--SQL
2023-02-09 10:24:54 0 举报
Flink--SQL
作者其他创作
大纲/内容
转换为表
执行环境
Group BY
时间语义
自定义函数
insertInto
解释表
水位线WaterMark
基于成本CBO
将fliter操作下推到join之前执行,减少了join的数据量,大大提升性能(大表小表)
FileSystem
基本结构
//读取数据将数据写到JDBCtableEnvironment.executeSql(\"CREATE TABLE flink_source_table (\\" + \
toDataStream
https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/concepts/time_attributes/
处理时间
执行计划
TOP-N
聚合查询
executeSql和sqlQuery
Table.explain() 返回一个 Table 的计划
动态表
//查询数据Table table = tableEnvironment.sqlQuery(\
Flink的代码执行都需要一个Environment,在SQL上,其Environment的基本接口就是TableEnvironment。类的集成关系如下,核心实现就是TableEnvironmentImpl
窗口
临时表依赖于会话,会话结束表消失
Cube
滚动窗口
基于规则RBO
SQL客户端
https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/sql/gettingstarted/
它可以是正持续时间和负持续时间。偏移规则: 偏移量 offset%10 在对窗口根据正负进行延迟或提前.
事件时间
Table : op f0 f1 f2
Regular Joins两张都是动态表
数据类型
对于SQL查询,有两个比较重要的方法:sqlQuery、executeSql。其中sqlQuery并不会真正的执行SQL语句,需要后续调用Table#execute()才会真正执行,接口返回的是一个Table;executeSql就是直接执行SQL语句的接口,接口返回的是一个TableResult。以executeSql追踪整个接口调用流程。
常量折叠
原子类型基本类型和常用类型
滑动窗口
将一个 Table 对象转换成 DataStream
本地文件
聚合操作
工作流程如下:SQL 和 Table 在进入 Flink 以后会转化成统一的数据结构表达形式,即 Logical Plan。Catalog 会提供一些原数据信息,用于后续的优化。--->FlinkCDC进行读取日志Logical Plan 是优化的路口,经过一系列的优化规则后,Flink 会把初始的 Logical Plan 优化为 Physical Plan(Transformation)最后转换成 JobGraph,用于提交到 Flink 的集群做分布式的执行。
窗口聚合
• 标量函数 0 到多个标量值映射成 1 个标量值• 表值函数 (打散炸开)自定义表值函数的输入参数也可以是 0 到多个标量。但是跟标量函数只能返回一个值不同的是,它可以返回任意多行• 聚合函数一行或者多行,每行可以有一列或者多列)聚合成一个标量值。• 表值聚合函数 (打散)自定义表值聚合函数(UDTAGG)可以把一个表(一行或者多行,每行有一列或者多列)聚合成另一张表,结果中可以有多行多列。
font color=\"#4669ea\
函数
Mysql CDC
https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/functions/overview/
代码相关
数据源的数据是持续输入查询过程是持续计算查询结果是持续输出
https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/sql/queries/window-tvf/
内联[将流信息全部存放到内存中,等待匹配,匹配成功输出数据]外联[根据左右外联显示出不匹配的数据,然后等待匹配,匹配后删除以前的重新输除数据]
SQL
Upsert Kafka
屏蔽如果临时表和永久表的标识符是一致的那么临时表会屏蔽永久表,知道临时表失效
时间范围内查找匹配数据
数据源
时间窗口
tableEnvironment.createTemporaryView(\"t_emp\
基本程序
//创建表tableEnvironment.executeSql(\"CREATE TABLE t_dept (\\" + \
偏移量
主表+维度表Temporal Joins: 维度表或者拉链表要以事实数据的时间语义为系统时间而不是当前真实的时间
Tuple; a->1
table1.where(Expressions.$(\"job\").isEqual(\"ANALYST\")) .groupBy(Expressions.$(\"deptno\")) .select(Expressions.$(\"empno\").max()) .execute() .print();
DataGEN
运行相关
//读取数据将数据写到JDBCtableEnvironment.executeSql(\"CREATE TABLE flink_jdbc_emp (\\" + \
可以用来避免加载不需要的字段。
分组聚合
临时视图依赖于会话,会话结束表消失
系统函数
分区剪裁
对sql中的常量的加减乘除等操作进行预计算,避免执行过程频繁对常量重复执行加减
//2,将流读取到对象(输出时带有列名)DataStreamSource<String> source1 = environment.readTextFile(\"data/emp.txt\");//将流读取到对象--->输出时带有列名SingleOutputStreamOperator<Emp> map = source1.map(l ->font color=\"#ff0000\
查询输出
根据计算资源
https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/connectors/datastream/kafka/
工作流程
表保存数据实体数据对应
ROLLUP
概念相关
表中的数据会发生变化或者修改Source-->Transformation-->SinkStream流:有界或者无界FlinkSql&TableApi--套壳-->Stream--目的-->操作更加简洁方便
https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/sql/queries/topn/查询要求按列排序的 N 个最小或最大值
Lookup Join动态表+外部表
谓词下推
Row 类型据库日志相关
用户自定义表值聚合函数是通过扩展 TableAggregateFunction 类来实现的。一个 TableAggregateFunction 的工作过程如下。首先,它需要一个 accumulator(累加器),这个 accumulator 负责存储聚合的中间结果。 通过调用 TableAggregateFunction 的 createAccumulator 方法来构造一个空的 accumulator。接下来,对于每一行数据,会调用 accumulate 方法来更新 accumulator。当所有数据都处理完之后,调用 emitValue 方法来计算和返回最终的结果。
Kafka
JDBC
分类
投影下推
分布式文件系统
https://github.com/ververica/flink-cdc-connectors
Interval Joins两张都是动态表
其实质是将一份很大的数据,划分为若干份小的数据。
累计窗口
//执行环境StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();StreamTableEnvironment tableEnvironment = StreamTableEnvironment.create(environment);
自己指定维度组合
Table API
Connectors连接器
Group Set
视图显示数据内存中进行操作
永久表依赖于元数据,需要手动删除表信息
0 条评论
下一页