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

这篇具有很好参考价值的文章主要介绍了HIVE SQL 根据主键去重并实现其余字段分组聚合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相同个人id下所有字段按时间顺序补位,取首个不为空值
HIVE SQL 根据主键去重并实现其余字段分组聚合,hive,sql,hadoop

--数据建表
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")
;
--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值。文章来源地址https://www.toymoban.com/news/detail-595313.html

--剔除字符串中的不可见字符,若该字段中均为不可见字符或该字段为空字符串,则转为空
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

到了这里,关于HIVE SQL 根据主键去重并实现其余字段分组聚合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch实现根据某一个字段去重后并求总数

    版本说明: elasticsearch:elasticsearch-7.12.1 kibana:kibana-7.12.1-windows-x86_64 原始数据: _index _type _id _score address age bir id name jason_doc_10 _doc L2aqNoABfXKo_Zq7BPkO 1 中国深圳 69 1650184553376 daZhaoLiu 大赵六 jason_doc_10 _doc MGaqNoABfXKo_Zq7mfma 1 中国上海市宝山区 20 1649862303342 user001 大张三 jason_doc_10

    2023年04月08日
    浏览(23)
  • list根据对象中某个字段属性去重Java流实现

    在Java的流(Stream)中,你可以使用distinct方法来实现根据对象中某个字段属性去重的功能。要实现这个功能,你需要重写对象的hashCode和equals方法,以确保相同字段属性的对象被认为是相等的。以下是一个示例代码: 在上面的代码中,YourObject是你自定义的对象类型,你需要根据

    2024年02月10日
    浏览(44)
  • 快速去重:使用Java根据对象某一属性去除重复对象的实现指南

    🧐📚 Java中的对象去重操作?跟着小编一起学习吧!👇 在处理对象集合时,有时候我们需要根据对象的某个属性进行去重操作。Java给我们提供了多种方法来实现这个功能。今天,小编就来给大家介绍一下如何使用Java根据对象的某个属性进行去重操作。💫 提供一个自定义的

    2024年02月04日
    浏览(37)
  • java8 列表通过 stream流 根据对象属性去重的三种实现方法

    0、User对象 1、使用filter进行去重 测试 ①、疑惑 既然 filter 里面调用的是 distinctPredicate 方法,而该方法每次都 new 一个新的 map 对象,那么 map 就是新的,怎么能做到可以过滤呢 ②、解惑 先看一下 filter 的部分实现逻辑,他使用了函数式接口 Predicate ,每次调用filter时,会使用

    2024年01月20日
    浏览(49)
  • list对象中如何根据对象中某个属性去重使用Java8流实现

    在 Java 8 的流操作中,可以使用 distinct 方法来对一个对象流进行去重,但是默认情况下它会使用对象的 equals() 方法来判断重复。如果你希望根据对象的某个属性进行去重,则可以使用 distinct 方法结合 map 方法来实现。 下面是一个示例代码,假设你有一个 List 对象 list,其中包

    2024年02月11日
    浏览(38)
  • golang实现es根据某字段分组,统计每组某一字段的数量,过滤空值并去重

    需求: 索引:dna 需求:根据app.Id分组,统计每组的OwnerBid数量,过滤空值并去重 dna索引结构 es查询语句 es查询结果 goalng实现 models.EsCountAgg 【面向校招】全力备战2023Golang实习与校招 欢迎进群交流:1007576722

    2024年02月17日
    浏览(37)
  • 【深入MaxCompute】人力家:用MaxCompute 事务表2.0主键模型去重数据持续降本增效

    简介:  MaxCompute新增Transaction Table2.0(下文简称事务表2.0)表类型在2023年6月27日开始邀测,支持基于事务表2.0实现近实时的增全量一体的数据存储、计算解决方案。 作者: 石玉阳 人力家 高级数据研发工程师 人力家是由阿里钉钉和人力窝共同投资成立,帮助客户进入人力资源

    2024年02月10日
    浏览(24)
  • Stream流根据属性去重

    创建一个user集合 写一个Predict 使用filter方法 结果: 小结: 实质上是将每个元素都放到distinctByKey()中的ConcurrentHashMap作为key进行过滤,如果key不存在那么就加上去,如果已经存在了就不加。所以这种方式的过滤只保留第一个重复元素。 结果与上面的一样 同时过滤两个属性 结

    2024年02月04日
    浏览(29)
  • Stream流中,根据对象去重+指定对象中的属性去重

    首先定义一个学生类: 在main方法中构造四个对象,其中第四个对象为重复对象,现在进行对象的去重、以及对象中某一属性的去重操作 一、根据对象去重: 以下代码写于main函数中: 运行结果如下,可以看到,stream流的distinct只是将对象去重,将相同的第三个和第四个对象

    2024年02月02日
    浏览(43)
  • ES根据得分数聚合去重

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包