presto高级用法(grouping、grouping sets)

news2024/12/23 22:09:02

目录

准备工作:

在hive中建表

在presto中计算

分解式

按照城市分组 统计人数

按照性别分组 统计人数

​编辑

按照爱好分组 统计人数

​编辑

按照城市和性别分组 统计人数

按照城市和爱好分组 统计人数

按照性别和爱好分组 统计人数

按照城市和性别还有爱好分组 统计人数

统计人数

合并式

presto使用grouping

presto使用grouping sets

grouping作用例子展示

高级用法: cube

rollup 用法


准备工作:

在hive中建表
drop database if exists db_test cascade;

create database db_test;

create table db_test.tb_student(
    name string,
    score   int,
    city    string,
    sex string,
    hobby string
)
row format delimited fields terminated by '\t';

load data local inpath '/test/student.txt' into table db_test.tb_student;

select * from db_test.tb_student;

student.txt数据

张三    10      北京    男      喝酒
李四    20      北京    男      抽烟
王五    30      北京    女      烫头
赵六    40      上海    男      抽烟
麻七    50      上海    女      烫头

在presto中计算

分解式
按照城市分组 统计人数
select city,count(1) as cnt from hive.db_test.tb_student group by city;

按照性别分组 统计人数
select hobby,count(1) as cnt from hive.db_test.tb_student group by hobby;
按照爱好分组 统计人数
select hobby,count(1) as cnt from hive.db_test.tb_student group by hobby;
按照城市和性别分组 统计人数
select city, sex, count(1) as cnt from hive.db_test.tb_student group by city, sex;

按照城市和爱好分组 统计人数
select city, hobby, count(1) as cnt from hive.db_test.tb_student group by city, hobby;

按照性别和爱好分组 统计人数
select sex, hobby, count(1) as cnt from hive.db_test.tb_student group by sex, hobby;

按照城市和性别还有爱好分组 统计人数
select city, sex, hobby, count(1) as cnt from hive.db_test.tb_student group by city, sex, hobby;

统计人数
select count(1) as cnt from hive.db_test.tb_student group by ();

合并式
with t1 as (
    select city, null as sex, null as hobby, count(1) as cnt, 1 as o from hive.db_test.tb_student group by city
    union all
    select null as city, sex, null as hobby, count(1) as cnt, 2 as o from hive.db_test.tb_student group by sex
    union all
    select null, null, hobby,count(1) as cnt, 3 as o from hive.db_test.tb_student group by hobby
    union all
    select city, sex, null, count(1) as cnt, 4 as o from hive.db_test.tb_student group by city, sex
    union all
    select city, null, hobby, count(1) as cnt, 5 as o from hive.db_test.tb_student group by city, hobby
    union all
    select null, sex, hobby, count(1) as cnt, 6 as o from hive.db_test.tb_student group by sex, hobby
    union all
    select city, sex, hobby, count(1) as cnt, 7 as o from hive.db_test.tb_student group by city, sex, hobby
    union all
    select null, null, null, count(1) as cnt, 8 as o from hive.db_test.tb_student group by ()
)
select * from t1
order by o, city, sex, hobby
;

presto使用grouping

select
    city,
    sex,
    count(1) as cnt,
    grouping(city, sex) as g
from hive.db_test.tb_student
group by city, sex
;

presto使用grouping sets

select
    city,
    sex,
    hobby,
    count(1) as cnt,
    grouping(city, sex, hobby)
from hive.db_test.tb_student
group by grouping sets (city, sex, hobby)
;

select
    city,
    sex,
    hobby,
    count(1) as cnt,
    grouping(city, sex, hobby)
from hive.db_test.tb_student
group by grouping sets (city, sex, hobby, (city, sex), (city, hobby), (sex, hobby), (city, sex, hobby), ())
;

select
    city,
    sex,
    hobby,
    count(1) as cnt,
    case
        when grouping(city, sex, hobby)=3 then 1
        when grouping(city, sex, hobby)=5 then 2
        when grouping(city, sex, hobby)=6 then 3
        when grouping(city, sex, hobby)=1 then 4
        when grouping(city, sex, hobby)=2 then 5
        when grouping(city, sex, hobby)=4 then 6
        when grouping(city, sex, hobby)=0 then 7
        when grouping(city, sex, hobby)=7 then 8
        else 100
    end as o
from hive.db_test.tb_student
group by grouping sets (city, sex, hobby, (city, sex), (city, hobby), (sex, hobby), (city, sex, hobby), ())
order by o, city, sex, hobby
;

grouping作用例子展示

with t1 as (
    select '北京' as city, '男' as sex
    union all
    select '北京' as city, '男' as sex
    union all
    select '北京' as city, '女' as sex
    union all
    select '北京' as city, null as sex
)
select
    city,
    sex,
    count(1) as cnt
from t1
group by grouping sets (city, (city, sex))

问题:
    city=北京, sex=null, cnt=4
    city=北京, sex=null, cnt=1
    为什么 city 和 sex 的值一样, 但是结果不同?
原因:
    一个null 表示跟这一列没有关系
    另一个null 表示 这一列的值 为null, 根据 列值统计的结果
    怎么区分
解决方案:
    grouping(city, sex)
        0,0     两个都有关
        0,1     只跟city有关
        1,0     只跟sex有关
        1,1     都这两列都无关
with t1 as (
    select '北京' as city, '男' as sex
    union all
    select '北京' as city, '男' as sex
    union all
    select '北京' as city, '女' as sex
    union all
    select '北京' as city, null as sex
)
select
    city,
    sex,
    count(1) as cnt,
    grouping(city, sex) g
from t1
group by grouping sets (city, (city, sex))

select
    city,
    sex,
    hobby,
    count(1) as cnt,
    case
        when grouping(city, sex, hobby)=3 then 1
        when grouping(city, sex, hobby)=5 then 2
        when grouping(city, sex, hobby)=6 then 3
        when grouping(city, sex, hobby)=1 then 4
        when grouping(city, sex, hobby)=2 then 5
        when grouping(city, sex, hobby)=4 then 6
        when grouping(city, sex, hobby)=0 then 7
        when grouping(city, sex, hobby)=7 then 8
        else 100
    end as o
from hive.db_test.tb_student
group by grouping sets (city, sex, hobby, (city, sex), (city, hobby), (sex, hobby), (city, sex, hobby), ())
order by o, city, sex, hobby

高级用法: cube

select
    city,
    sex,
    hobby,
    count(1) as cnt,
    case
        when grouping(city, sex, hobby)=3 then 1
        when grouping(city, sex, hobby)=5 then 2
        when grouping(city, sex, hobby)=6 then 3
        when grouping(city, sex, hobby)=1 then 4
        when grouping(city, sex, hobby)=2 then 5
        when grouping(city, sex, hobby)=4 then 6
        when grouping(city, sex, hobby)=0 then 7
        when grouping(city, sex, hobby)=7 then 8
        else 100
    end as o
from hive.db_test.tb_student
group by cube(city, sex, hobby)
order by o, city, sex, hobby

rollup 用法

select
    city,
    sex,
    hobby,
    count(1) as cnt,
    case
        when grouping(city, sex, hobby)=3 then 1
        when grouping(city, sex, hobby)=5 then 2
        when grouping(city, sex, hobby)=6 then 3
        when grouping(city, sex, hobby)=1 then 4
        when grouping(city, sex, hobby)=2 then 5
        when grouping(city, sex, hobby)=4 then 6
        when grouping(city, sex, hobby)=0 then 7
        when grouping(city, sex, hobby)=7 then 8
        else 100
    end as o
from hive.db_test.tb_student
group by rollup(city, sex, hobby)
order by o, city, sex, hobby
;

总结:

presto时间函数:

date()类型 表示 年月日

timestamp类型表示 年月日时分秒

eg:timestamp('2024-08-18 22:13:10','%Y-%m-%d %H%i%s')

date_add(unit, value,timestamp) 

grouping sets()相当于一个集合 都能根据括号里的内容分组查询到相应的数据

grouping 根据8421码 0表示与该列有关系1表示无关 通过计算数值 查看与列之间分组的关系

cube(city, sex, hobby) 等价于 grouping sets (city, sex, hobby, (city, sex), (city, hobby), (sex, hobby), (city, sex, hobby), ())

rollup (city, sex, name) 等价于 grouping set((city, sex, name), (city, sex), city, ())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt开发】创建并打开子窗口(QWidget)的注意事项 禁止其他窗口点击、隐藏窗口、子窗口不退出的配置和解决方案

【Qt开发】创建并打开子窗口(QWidget)的注意事项 禁止其他窗口点击、隐藏窗口、子窗口不退出的配置和解决方案 文章目录 新建QWidget测试注意事项不要用多线程方式运行子窗口不要在打开子窗口后用阻塞死等不要用临时变量定义子窗口 禁止其他窗口的点击隐…

【Qt】常用控件QPushButton

常用控件QPushButton QWidget中涉及的各种属性/函数/使用方法,对Qt中的各种控件都是有效的。 QPushButton继承自QAbstractButton。这个类是抽象类,是其他按钮的父类。 QAbstractButton中和QPushButton相关性比较大的属性。 属性说明 text 按钮中的⽂本…

Vue中下载内容为word文档

1.使用 html-docx-js:这是一个将 HTML 转换为 Word 文档的库。 2. 利用 Blob 和 FileSaver.js:创建并下载生成的 Word 文档。 在 Vue.js 中实现步骤如下: 1. npm 安装 html-docx-js 和 file-saver npm install html-docx-js npm install file-saver2.…

CAS-ViT:面向高效移动应用的卷积加性自注意力视觉Transformer

摘要 https://arxiv.org/pdf/2408.03703 视觉转换器(Vision Transformers,ViTs)以其标记混合器强大的全局上下文能力,在神经网络领域取得了革命性的进展。然而,尽管以往的工作已做出相当大的努力,但成对标…

终于来了!中国首个接入大模型的Linux开源操作系统正式发布!

在AI飞速发展的今天,谁不希望自己的电脑里住着一个AI助手,我们动动嘴皮子就能指挥电脑干活,省时省力?但是Windows Copilot锁了区,很多用户只能“望洋兴叹”。 而现在,国产站出来了,说我们也有A…

Python常用的模块

一、logging模块 一)日志级别 critical50 error40 waring30 info20 debug10 notset0 二)默认的日志级别是waring(30),默认的输出目标是终端 logging输出的目标有两种:1、终端;2、文件 高于warn…

如何查看麒麟系统下的CPU信息

如何查看麒麟系统下的CPU信息 一、使用lscpu命令二、使用cat /proc/cpuinfo命令 💖The Begin💖点点关注,收藏不迷路💖 在麒麟(Kylin)Linux系统中,了解CPU的详细信息对于系统性能调优、故障诊断以…

转债违约,是实体经济高质量发展的一大步?

8月14日,岭南股份公告其发行的可转债无法按期兑付,出现实质违约。8月16日,证券时报发表了一篇“雄文”《国企可转债的刚兑信仰该放下了》,引爆了舆论。 文章内容总结下,就是对投资者一顿批评教育,批评投资者…

leetcode-461. 汉明距离

题目描述 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入:x 1, y 4 输出:2 解释: 1 (0 0 0 1) 4 (0 1 0 0) …

Spring7中事务传播机制形象图解

一、Spring的7种事务传播机制 Spring事务传播机制是指在多个事务方法相互调用的情况下,事务如何在方法之间进行传播和管理的机制。通过事务传播机制,可以控制事务的范围和行为,保证多个事务方法的一致性和完整性。Spring提供了七种事务传播行…

Linux系统挂载U盘方法

第一步: 插入U盘,如果能够识别出U盘,则会**出一些信息 第二步: 查看U盘系统分配给U盘的设备名;输入如下命令进行查看: 使用fdisk -l命令查看一下U盘是否有被识别到,及识别的U盘是在哪个位置 …

8.15 day bug

bug1 一个按钮折腾了 两个小时 一直点第一个按钮,然后进去后发现根本没有课程,需要创建workspace,然后各种问题,还是没把课程启动起来,然后去看gitpod使用文档,搞懂工作区到底是怎么回事,一通操…

实用篇| 如何快速搭建“二手系统”的数据库

对于一些程序员最痛苦的是接手一些“二手系统“, 由于年久失修, 加上裁员离职,系统文档不完善等原因, 只留下服务器配置和代码。 接手人,只能对着这些仅存的代码和服务器硬刚, 对服务器硬刚的第二步&#x…

Golang | Leetcode Golang题解之第343题整数拆分

题目&#xff1a; 题解&#xff1a; func integerBreak(n int) int {if n < 3 {return n - 1}quotient : n / 3remainder : n % 3if remainder 0 {return int(math.Pow(3, float64(quotient)))} else if remainder 1 {return int(math.Pow(3, float64(quotient - 1))) * …

学习日志--NAT(Network Address Translation)网络地址转换

目录 一、什么是NAT网络地址转换 二、配置并检查实验环境 三、NAT实现原理 四、NAT实现静态配置一对一 五、NAT实现动态配置一对一 六、PAT端口地址转换一对多 七、NAT优化easyIP的问题 八、NAT网络地址转换PAT多对多转换&#xff08;特殊情况&#xff09; 九、NAT---…

【Harmony OS 4.0】从零开始,快速上手

2019年8月份Harmony OS 1.0&#xff0c; 2020年9月份Harmony OS 2.0 2022年7月份Harmony OS 3.0 2023年3月份Harmony OS 4.0&#xff0c;不兼容 android app 1. 快速上手 1.1 下载并安装 DevEco Studio 1.2 创建项目并初始化 项目 build init 时报错&#xff1a;request to h…

产业经济大脑建设方案(三)

为了加速产业经济的智能化转型&#xff0c;我们建议建立一个全面集成的产业经济大脑系统&#xff0c;该系统结合人工智能、大数据分析和云计算技术&#xff0c;构建数据驱动的决策支持平台。该平台将实时采集和处理产业链各环节的数据&#xff0c;利用智能算法进行深度分析和预…

【C++】C++11新增特性

目录 C11简介&#xff1a; 1、统一的列表初始化&#xff1a; std::initializer_list 2、自动类型推导&#xff1a; auto&#xff1a; decltype&#xff1a; 3、final 和 override final&#xff1a; override&#xff1a; 4、默认成员函数控制&#xff1a; 显示缺省…

网络安全简介(入门篇)

目录 前言 一、什么是网络安全&#xff1f; 二、网络安全的重要性 1、保护数据安全和隐私 2、防止服务中断和数据丢失 3、防止经济损失和法律责任 4、维护公共安全和国家安全 5、提升技术发展和创新 三、网络安全等级保护 1、第一级&#xff08;自主保护级&#xff0…

Java基础-Windows开发环境下Java8和OpenJDK17的自由切换

一、Java语言介绍 Java是一种广泛使用的编程语言和计算平台&#xff0c;具有平台无关性、稳定性和强大的生态系统。随着时间的推移&#xff0c;Java不断演进&#xff0c;推出了多个版本&#xff0c;每个版本都带来了新的功能和性能改进。 1. Java主流版本 Java的主流版本包括…