HIVE SQL 根据主键去重并实现其余字段分组聚合

相同个人id下所有字段按时间顺序补位,取首个不为空值

c 复制代码
--数据建表
drop table if exists db.tb_name;
create table if not exists db.tb_name
( id string
	,name string
	,tele string
	,email string
	,`date` string
)
;
insert overwrite table db.tb_name
values 
("32001","张三","23456789",null,"2023-07-18")
,("32001",null,null,"23456789@163.com","2023-07-19")
,("32002","李四",null,"23456876@qq.com","2023-07-18")
,("32003","王二",null,null,"2023-07-18")
,("32003",null,"9876789",null,"2023-06-18")
,("32003",null,null,"9876789@gmail.com","2023-07-18")
,("32004","刘五","987456798",null,"2023-07-18")
,("32004","刘七","1987456798",null,"2023-07-20")
;
c 复制代码
--distribute by 分区排序:类似MR中partition,进行分区,结合sort by使用

drop table if exists db.tb_name_new;
create table if not exists db.tb_name_new as
select id 
	,collect_list(`name`)[0] as `name`
	,collect_list(`tele`)[0] as `tele`
	,collect_list(`email`)[0] as `email`
	,collect_list(`date`)[0] as `date`
from 
(
select id
	,name
	,tele
	,email
	,`date`
from 
db.tb_name
distribute by id 
sort by id,`date` desc
) t 
group by id
;

*注意:此处是取的首个不为空(即不为null)的字段,所以在实际使用过程中应提前将空字符串转为null值。

c 复制代码
--剔除字符串中的不可见字符,若该字段中均为不可见字符或该字段为空字符串,则转为空
case when length(regexp_replace(col_name,'[\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]+|\\s+',''))>0 
	then regexp_replace(col_name,'[\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]+|\\s+','')
	else null end as new_col_name
相关推荐
猫豆~13 分钟前
Ansible自动运维——6day
linux·数据库·sql·缓存·云计算
last_zhiyin1 小时前
Oracle sql tuning guide 翻译 Part 4-1 --- 连接操作(Joins)
数据库·sql·oracle
-suiyuan-2 小时前
sqli-labs靶场1~2笔记
数据库·sql
xerthwis2 小时前
Hadoop:大数据世界的“古老基石”与“沉默的共生者”
大数据·人工智能·hadoop
爱好读书2 小时前
AI生成ER图|SQL生成ER图
数据库·人工智能·sql·毕业设计·课程设计
rannn_1113 小时前
【SQL题解】力扣高频 SQL 50题|DAY2+3
数据库·后端·sql·leetcode
l1t3 小时前
DeepSeek对Oracle 数据库新特性 SQL 宏的总结
数据库·人工智能·sql·oracle
一个天蝎座 白勺 程序猿3 小时前
Apache IoTDB(12):深度解析时序数据聚合的GROUP BY与HAVING子句
数据库·sql·apache·iotdb
武昌库里写JAVA3 小时前
java设计模式 - 工厂方法模式
vue.js·spring boot·sql·layui·课程设计
yumgpkpm4 小时前
Cloudera CDH5|CDH6|CDP7.1.7|CDP7.3|CMP 7.3的产品优势分析(在华为鲲鹏 ARM 麒麟KylinOS、统信UOS)
大数据·人工智能·hadoop·深度学习·spark·transformer·cloudera