文章目录

  • 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 到期时间相关推荐

  1. hive通过grouping sets多维度组合去重统计避免使用distinct

    在hive中,如果遇到多维度组合统计,并且要进行去重统计,例如统计不同维度组合的访问用户数,比如统计运营商.手机品牌.网络类型的用户数,怎样避免不用ditinct(因为distinct效率低),并且g ...

  2. grouping sets函数

    grouping sets: 根据不同的维度组合进行聚合,等价于将不同维度的group by结果集进行union all grouping__id(请注意函数名中的下划线是两个!):表示结果属于哪一个 ...

  3. Hive 多维度聚合分析查询

    熟练使用多维度聚合函数,可以帮助开发者减少在处理数据时需要根据不同维度多次union query的代码编写工作 Hive常见的多维度聚合函数有: With Cube:任意维度聚合 Grouping S ...

  4. php jwt token过期时间,php – 动态设置laravel jwt的到期时间

    嗨,我在前端使用角度js,在后端使用带有tymon jwt库的卫星和laravel.我正在使用jwt身份验证.我想在我的网络应用程序中记住我的功能.我看到'ttl'在laravel'config / ...

  5. Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP

    GROUPING SETS 该关键字可以实现同一数据集的多重group by操作.事实上GROUPING SETS是多个GROUP BY进行UNION ALL操作的简单表达,它仅仅使用一个stage完 ...

  6. Hive函数:GROUPING SETS,GROUPING__ID,CUBE,ROLLUP

    参考:lxw大数据田地:http://lxw1234.com/archives/2015/04/193.htm 数据准备: CREATE EXTERNAL TABLE test_data ( mont ...

  7. PG:什么是grouping sets

    学习PG聚合操作机制时,看到ExecInitAgg中初始化时有对AggState中有pergroups等进行初始化[AggState的解释见上一篇:GreenPlum7聚合操作结构体之间关系 http ...

  8. 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, ...

  9. Hive之grouping sets用法详解

    目录 关键字: 简单示例: 实例一: presto中grouping sets函数 关键字: GROUPING SETS: 根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UN ...

最新文章

  1. 字符串截取,对数字,英文,汉字都可以
  2. Python知识点7——类
  3. 校园技术工坊丨云开发校园执行官招募开启!
  4. Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?
  5. 编译Ruby2.0 问题解决
  6. LeetCode 557. Reverse Words in a String III
  7. mac 不显示 外接屏幕_Mac外接屏幕亮度调整
  8. 转载 树莓派vnc 教程
  9. [Javascript]XMLHttpRequest对象实现下载进度条
  10. 【MySQL】一条查询语句在MySQL内部的执行过程
  11. android 个人标准身高计算器,Android开发:标准身高计算器应用的…
  12. 测试用例方法--等价类划分法
  13. 自定义List对象集合排序
  14. php调用itunes,使用cURL和PHP检索iTunes App Store XML
  15. (二十九)树莓派3B+ 获取BH1750FVI光强度传感器数据
  16. 30人围成一圈的小游戏。c语言
  17. python字典改键_python修改字典键(key)的方法
  18. VS2017-C++-使用CSpreadSheet写EXCEL
  19. BUUCTF:[DDCTF2018](╯°□°)╯︵ ┻━┻
  20. debian安装kali_如何在Ubuntu,Debian,Kali,Mint中启动,停止和启用,禁用Iptables或Ufw...

热门文章

  1. 软件测试丨Git分支管理实操,搞定在线合并和本地合并
  2. 飞檐走壁已经不是成龙甄子丹们的特技了,TA也可以做到!
  3. 光时域反射仪 具备哪些功能 推荐哪个品牌
  4. Oracle ebs r12官方虚拟机配置
  5. mb计算机单位,mb是什么单位
  6. 判断银行卡号归属银行和卡类型
  7. 学生免费申请JetBrains许可
  8. [wayfarer]PetShop的系统架构设计
  9. 基于Java+SSM+MySQL的高校就业创业信息管理系统
  10. noip初赛问题解析