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);
  1. 视图
  2. 动态表 dynamic table
  3. 时间特性 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 interval1second 单数
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 @   rudynan  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示