flink_tableApi/Flink_Sql_2

table
  1. 实体表
    catalog 目录
    database 数据库
    table 表

    创建表

	tableEnv
		.connect(...) 链接外部/定义表的数据来源
		.withFormat(...) 数据格式化方法
		.withSchema(...) 定义表结构
		.createTemporaryTable("mytable");

表查询
更新模式
追加append模式
只做插入操作insert
撤回(retract)模式
插入操作add 删除操作retract撤回 更新操作将上一条retract和下一条add
更新插入upsert模式
更新和插入编码为upsert 删除编码为deleted 需要指定key
table 转换成 dataStream
追加模式append mode
tableEnv.toAppendStream(resultTable,Row.class);
撤回模式retract mode
tableEnv.toRetractStream(resultTable,Row.class);
dataStream 转换成 table
tableEnv.fromDataStream(dataSteram);
指定表的字段名
tableEnv.fromDataStream(dataSteram,"id,time as ts");
创建临时视图 temporary view
datastream 创建临时视图
tableEnv.createtTemporaryView("sensor",dataStream,"id,time as ts")
table创建临时视图
tableEnv.createTemporaryView("sensor",sensorTable)
查看执行计划
tableEnv.explain(table);
2. 视图
3. 动态表 dynamic table
4. 时间特性 time attributes
处理时间processing time

tableEnv.fromDataStream(dataStream,"id,temperature,timestamp as ts,pt.proctime");

事件时间

	.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<SensorReading>(Time.seconds(2)) {
            @Override
            public long extractTimestamp(SensorReading sensorReading) {
                return sensorReading.getTimestamp();
            }
        });
	env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
	tableEnv.fromDataStream(dataStream, "id,temperature,timestamp.rowtime as ts,pt.proctime");
窗口
input.window([w:GroupWindow] as "w")
.groupBy("w,a")
.select("a,b.sum")

滚动窗口 tumbling window

// sql
select id,count(id) as cnt,avg(temp) as avgTemp,tumble_end(ts,interval '10' second) from sensor group by id tumble(ts,interval '10' second)

// 事件时间窗口 api
.window(Tumble.over("10.minutes").on("rowtime").as("w"))
// 滚动时间窗口 api
.window(Tumble.over("10.minutes").on("proctime").as("w"))
// 计数窗口
.window(Tumle.over("10.rows").on("proctime").as("w"))

滑动窗口 sliding windows

//sql
HOP(time_attr,滑动步长,窗口长度)
// 滑动事件时间窗口 api
.window(Slide.over("10.minutes").every("5.minutes").on("rowtime").as("w"))
// 滑动处理时间窗口
.window(Slide.over("10.minutes").every("5.minutes").on("proctime").as("w"))
// 滑动计数窗口
.window(Slide.over("10.rows").every("5.minutes").on("proctime").as("w"))

会话窗口 session windows

//sql
SESSION(time_attr时间字段,窗口间隔)
// 事件时间session窗口
.window(Session.withGap("10.minutes").on("rowtime").as("w"))
// 处理时间session窗口
.window(Session.withGap("10.minutes").on("proctime").as("w"))

over windows
无界over windows

preceding 之前的
following 之后的
// 无界的事件时间 
.window(Over.partitionBy("a").orderBy("rowtime").preceding(UNBOUNDED_RANGE).as("w"))
// 无界的处理时间
.window(Over.partitionBy("a").orderBy("proctime").preceding(UNBOUNDED_RANGE).as("w"))
// 无界的事件时间 row count
.window(Over.partitionBy("a").orderBy(rowtime).preceding(UNBOUNDED_ROW).as("w"))
// 无界的处理时间 row count
.window(Over.partitionBy("a").orderBy(proctime).preceding(UNBOUNDED_ROW).as("w"))

有界over windows

// 有界的事件时间
.window(Over.partitionBy("a").orderBy("rowtime").preceding("1.minutes").as("w"))
// 有界的处理时间
.window(Over.partitionBy("a").orderBy("proctime").preceding("1.minutes").as("w"))
// 有界的事件时间 row count
.window(Over.partitionBy("a").orderBy("rowtime").preceding("10.rows").as("w"))
// 有界的处理时间 row count
.window(Over.partitionBy('a').orderBy("proctime").preceding("10.rows").as("w"))
select id,ts,count(id) over ow,avg(temp) over ow
from sensor
window ow as (
partition by id 
order by ts 
rows between 2 preceding and current row)

函数

**字符函数 上面sql 下面api**
字符串拼接
s1 || s2 
s1 + s2
字符串转大写
upper(s)
string.uppercase()
字符串长度
char_length()
string.charlength()

**时间函数**
字符转date
date s
string.todate
字符转时间戳
timestamp string
string.totimestamp
当前时间
current_time
currenttime()
一段时间
interval string range interval ‘1’ second 单数
numeric.days  1.days 1.minutes

**聚合函数**
计算个数
count()
field.count
总和
sum()
field.sum0

rank()
row_number()

用户自定义函数

标量函数scalar functions 只返回一个值
继承ScalarFunction 自定义函数 注册然后使用
表函数 table functions 返回任何数量的行
继承tablefunction
聚合函数 aggregate function 多个值聚合返回一个标量值
继承 aggregatefunction 实现 createaccumulator
表聚合函数 多个值聚合返回多个值相当于一个表
继承tableaggregatefunction

posted @ 2022-01-24 16:35  rudynan  阅读(130)  评论(0)    收藏  举报