grouping sets的用法

本文深入探讨了Hive中的GroupingSets功能,通过实例展示了如何使用它来生成不同维度的数据,包括全国、省份和城市维度。讲解了如何避免重复组合,并提供了SQL查询示例,用于统计销售数据并按日期、省份和城市聚合。同时,还介绍了如何利用groupingsets生成全国、省份、城市和区县维度的数据,帮助理解这一高级聚合操作在大数据分析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HIve-Grouping sets用法

grouping sets不需要把所有的列名进行组合,把需要的进行组合就可以了;(dt),(dt, lead_pro_name),(dt, lead_city_name),这里加了三种情况,分别表示的是每天全国维度,每天省份维度,每天城市维度,如果再加(dt, lead_pro_name,lead_city_name),这个就是和(dt, lead_city_name)一样的情况了,会造成重复,所以写的时候先考虑清楚,是需要将哪几种维度的放在一起。

select
    dt,
    lead_pro_name,
    lead_city_name,
    case
        when lead_pro_name is null
        and lead_city_name is null then '全国'
        when lead_pro_name is not null
        and lead_city_name is null then '省份'
        when lead_city_name is not null then '城市'
    end as `维度`,
    sum(sale_cnt) as `销量`
from
    wujie.dm_cx_trd_multi_order_di
where
    dt >= date_sub(current_date, 2)
    and is_td_valid_pay = 1
group by
    dt,
    lead_pro_name,
    lead_city_name grouping sets(
        (dt),
        (dt, lead_pro_name),
        (dt, lead_city_name)
    );

同时产生全国, 省份,城市,区县维度的数据,注意grouping sets里的()为全国维度的数据

select
nvl(pro_id,'-999999') pro_id,
nvl(pro_name,'-999999') pro_name,
nvl(city_id,'-999999') city_id,
nvl(city_name,'-999999') city_name,
nvl(county_id,'-999999') county_id,
nvl(county_name,'-999999') county_name

from (select * from table)t

group by
    pro_id,
    pro_name,
    city_id,
    city_name,
    county_id,
    county_name 
grouping sets
   (
        (),
        (pro_id, pro_name),
        (pro_id, pro_name, city_id, city_name),
        (pro_id,pro_name,he.city_id,city_name,county_id,county_name)
    )

### 使用 Hive 查询 GPS 数据对应的地区 为了实现基于GPS数据查询对应地区的功能,在Hive中可以通过创建外部表并加载包含经纬度以及相应地理位置信息的数据集来完成此操作。假设已经有一个包含了详细地理映射关系(即经纬度到具体地址或区域划分)的文件,下面是如何构建这样一个流程。 #### 创建数据库与表格结构 首先定义一个新的数据库用于存储位置相关的表单: ```sql CREATE DATABASE IF NOT EXISTS geo_data; USE geo_data; ``` 接着建立一张用来保存GPS坐标及其关联的城市/省份数量统计信息的新表。考虑到实际应用中的需求,这张表应该至少包含经度(longitude)、纬度(latitude),以及可能存在的其他元数据字段如时间戳(timestamp), 记录条目总数(msg_count),并且按照这些维度进行聚合分析[^3]。 ```sql CREATE EXTERNAL TABLE gps_location ( longitude DOUBLE, latitude DOUBLE, timestamp STRING, msg_count INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/user/hive/gpsdata'; ``` 对于给定的一组GPS点位,如果想要知道它们分别属于哪个特定行政区域内,则还需要另一张预先准备好的参照表——它记录着各个行政区划边界范围内的最小最大经纬度值或其他形式的空间索引特征。例如: ```sql CREATE EXTERNAL TABLE region_boundaries( min_longitude DOUBLE, max_longitude DOUBLE, min_latitude DOUBLE, max_latitude DOUBLE, province STRING, city STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/boundarydata'; ``` #### 执行空间匹配查询 有了上述两张表之后,就可以编写SQL语句来进行空间上的交集判断了。这里采用简单的矩形包围盒方法来做初步筛选;更精确的方式则涉及到复杂的几何运算库支持下的多边形内含测试等高级特性[^1]。 ```sql SELECT r.province, r.city, COUNT(*) AS location_count FROM gps_location g JOIN region_boundaries r ON g.longitude BETWEEN r.min_longitude AND r.max_longitude AND g.latitude BETWEEN r.min_latitude AND r.max_latitude GROUP BY r.province, r.city; ``` 这段代码实现了对GPS坐标的分组汇总,并按省份和城市两个级别进行了分类计数。这有助于了解不同地域范围内消息发送频率的情况[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值