flink GROUPING SETS多维度聚合、设置Table state 到期时间
文章目录
- 1. GROUPING SETS
- 2. TTL
1. GROUPING SETS
在一个GROUP BY 查询中,根据不同的维度组合进行聚合。GROUPING SETS就是一种将多个GROUP BY逻辑UNION在一起。GROUPING SETS会把在单个GROUP BY逻辑中没有参与GROUP BY的那一列置为NULL值。空分组集意味着所有行都聚合到一个组中
SELECT supplier_id, rating, COUNT(*) AS total
FROM (VALUES('supplier1', 'product1', 4),('supplier1', 'product2', 3),('supplier2', 'product3', 3),('supplier2', 'product4', 4))
AS Products(supplier_id, product_id, rating)
GROUP BY GROUPING SETS ((supplier_id, rating), (supplier_id), ())
代码实例:
public class TableExample {public static void main(String[] args) throws Exception {// 获取流执行环境StreamExecutionEnvironment env =StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);// 读取数据源SingleOutputStreamOperator<Event> eventStream = env.fromElements(new Event("Alice", "./home", 1000L),new Event("Bob", "./cart", 1000L),new Event("Alice", "./prod?id=1", 5 * 1000L),new Event("Cary", "./home", 60 * 1000L),new Event("Bob", "./prod?id=3", 90 * 1000L),new Event("Alice", "./prod?id=7", 105 * 1000L));//获取表执行环境StreamTableEnvironment tableEnvironment = StreamTableEnvironment.create(env);Table eventTable = tableEnvironment.fromDataStream(eventStream, $("url"), $("user"), $("timestamp").as("times"));//eventTable.printSchema();tableEnvironment.createTemporaryView("myTable", eventTable);Table resultTable = tableEnvironment.sqlQuery("select url,user,count(times) from myTable group by GROUPING SETS ((url,user),(url),(user))");Table setsTable = tableEnvironment.sqlQuery("SELECT supplier_id, rating, COUNT(*) AS total\n" +"FROM (VALUES\n" +" ('supplier1', 'product1', 4),\n" +" ('supplier1', 'product2', 3),\n" +" ('supplier2', 'product3', 3),\n" +" ('supplier2', 'product4', 4))\n" +"AS Products(supplier_id, product_id, rating)\n" +"GROUP BY GROUPING SETS ((supplier_id, rating), (supplier_id), ())");tableEnvironment.toChangelogStream(setsTable).print("setsTable");// TableResult tableResult = tableEnvironment.executeSql(" explain plan for select url,user,sum(times) from myTable group by GROUPING SETS ((url,user),(url),(user))");Table rowNumTable = tableEnvironment.sqlQuery("SELECT user, url, times, row_num\n" +"FROM (\n" +" SELECT *,\n" +" ROW_NUMBER() OVER (\n" +"PARTITION BY user\n" +" ORDER BY CHAR_LENGTH(url) desc \n" +") AS row_num\n" +" FROM myTable)\n" +"WHERE row_num <= 2");// tableResult.print();// Table resultTable = eventTable.select($("url"));// tableEnvironment.toDataStream(resultTable).print();// tableEnvironment.toChangelogStream(resultTable).print();// tableEnvironment.toChangelogStream(rowNumTable).print();env.execute();}
}
2. TTL
在持续查询的过程中,由于用于分组的 key 可能会不断增加,因此计算结果所需要维护的状态也会持续增长。为了防止状态无限增长耗尽资源,Flink Table API 和 SQL 可以在表环境中配置状态的生存时间(TTL):
TableEnvironment tableEnv = ...
// 获取表环境的配置
TableConfig tableConfig = tableEnv.getConfig();
// 配置状态保持时间
tableConfig.setIdleStateRetention(Duration.ofMinutes(60));
或
TableEnvironment tableEnv = ...
Configuration configuration = tableEnv.getConfig().getConfiguration();
configuration.setString("table.exec.state.ttl", "60 min");
配置 TTL 有可能会导致统计结果不准确,这其实是以牺牲正确性为代价换取了资源的释放
flink GROUPING SETS多维度聚合、设置Table state 到期时间相关推荐
- hive通过grouping sets多维度组合去重统计避免使用distinct
在hive中,如果遇到多维度组合统计,并且要进行去重统计,例如统计不同维度组合的访问用户数,比如统计运营商.手机品牌.网络类型的用户数,怎样避免不用ditinct(因为distinct效率低),并且g ...
- grouping sets函数
grouping sets: 根据不同的维度组合进行聚合,等价于将不同维度的group by结果集进行union all grouping__id(请注意函数名中的下划线是两个!):表示结果属于哪一个 ...
- Hive 多维度聚合分析查询
熟练使用多维度聚合函数,可以帮助开发者减少在处理数据时需要根据不同维度多次union query的代码编写工作 Hive常见的多维度聚合函数有: With Cube:任意维度聚合 Grouping S ...
- php jwt token过期时间,php – 动态设置laravel jwt的到期时间
嗨,我在前端使用角度js,在后端使用带有tymon jwt库的卫星和laravel.我正在使用jwt身份验证.我想在我的网络应用程序中记住我的功能.我看到'ttl'在laravel'config / ...
- Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
GROUPING SETS 该关键字可以实现同一数据集的多重group by操作.事实上GROUPING SETS是多个GROUP BY进行UNION ALL操作的简单表达,它仅仅使用一个stage完 ...
- Hive函数:GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
参考:lxw大数据田地:http://lxw1234.com/archives/2015/04/193.htm 数据准备: CREATE EXTERNAL TABLE test_data ( mont ...
- PG:什么是grouping sets
学习PG聚合操作机制时,看到ExecInitAgg中初始化时有对AggState中有pergroups等进行初始化[AggState的解释见上一篇:GreenPlum7聚合操作结构体之间关系 http ...
- Hive sql分组函数grouping sets、cube、rollup用法简介
文章目录 1.数据如下: 2.建表如下: 3.grouping sets 4.cube 5.rollup 1.数据如下: user_id,dep_id,group_id,salary 10001,a, ...
- Hive之grouping sets用法详解
目录 关键字: 简单示例: 实例一: presto中grouping sets函数 关键字: GROUPING SETS: 根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UN ...
最新文章
- 字符串截取,对数字,英文,汉字都可以
- Python知识点7——类
- 校园技术工坊丨云开发校园执行官招募开启!
- Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?
- 编译Ruby2.0 问题解决
- LeetCode 557. Reverse Words in a String III
- mac 不显示 外接屏幕_Mac外接屏幕亮度调整
- 转载 树莓派vnc 教程
- [Javascript]XMLHttpRequest对象实现下载进度条
- 【MySQL】一条查询语句在MySQL内部的执行过程
- android 个人标准身高计算器,Android开发:标准身高计算器应用的…
- 测试用例方法--等价类划分法
- 自定义List对象集合排序
- php调用itunes,使用cURL和PHP检索iTunes App Store XML
- (二十九)树莓派3B+ 获取BH1750FVI光强度传感器数据
- 30人围成一圈的小游戏。c语言
- python字典改键_python修改字典键(key)的方法
- VS2017-C++-使用CSpreadSheet写EXCEL
- BUUCTF:[DDCTF2018](╯°□°)╯︵ ┻━┻
- debian安装kali_如何在Ubuntu,Debian,Kali,Mint中启动,停止和启用,禁用Iptables或Ufw...