Hive SQL 数据去重简析
来源:互联网 发布:淘宝装修购买 编辑:程序博客网 时间:2024/06/11 13:12
hive的很多表中或在执行表的join命令后,有可能在若干字段上存在重复现象,为了后续业务的需要,减少计算量,需要对表的重复记录去重,最近几天,在学习使用HQL的应用,也尝试着处理表的重复记录问题。
1.group by(不推荐使用在去重场景)
最开始不熟悉HQL的其他命令,所以采用了该命令用来去重,在某些场景下group by可以用来去重,但更多的是用来进行分组,
且group by在去重中应用比较麻烦。
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。
注意:group by 是先排序后分组;
举例子说明:如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术
select DepartmentID as '部门名称',COUNT(*) as '个数' from BasicDepartmentgroup by DepartmentID
这个就是使用了group by +字段进行了分组,其中我们就可以理解为我们按照了部门的名称ID DepartmentID将数据集进行了分组,然后再进行各个组的统计数据分别有多少;
如果不用count(*) 而用类似下面的语法
select DepartmentID, DepartmentName from BasicDepartment group by DepartmentID
将会出现错误:
消息 8120,级别 16,状态 1,第 1 行
选择列表中的列'BasicDepartment.DepartmentName' 无效,因为该列没有包含在聚合函数或GROUP BY 子句中。
这就是我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
出现的错误详解:咱们看看group by 的执行的过程,先执行select的操作返回一个程序集,然后去执行分组的操作,这时候他将根据group by 后面的字段进行分组,并且将相同的字段并称一列数据,如果group by 后面没有这个字段的话就要分成好多的数据。但是分组就只能将相同的数据分成两列数据,而一列中又只能放入一个字段,所以那些没有进行分组的数据系统不知道将数据放入哪里,所以就出现此错误
目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值,然后将其放在对应的数据格中,那么完成这个步骤的就是聚合函数。2.采用row_number() over(partition by .... )(选择分区条件中第几条数据输出,若该序列没有,则不输出)
下面以班级成绩表t2来说明其应用
( select class, s, row_number()over(partition by class order by s desc) mm from t2
)
where mm=1;
1 95 1 --95有两名但是只显示一个
2 92 1
3 99 1 --99有两名但也只显示一个
- Hive SQL 数据去重简析
- Hive 股票数据SQL分析[Hive 案例]
- hive 数据查询复杂SQL
- Sark Sql读取hive数据
- Hive SQL使用和数据加载
- spark sql and hive 3g数据测试
- Hadoop Hive基础SQL语法(DQL 操作:数据查询SQL)
- hive sql
- HIVE SQL
- hive sql
- Hive SQL使用和数据加载的一点总结
- spark sql 访问hive数据时找不mysql的解决方法
- spark sql 访问hive数据时找不mysql的解决方法
- Hive SQL使用和数据加载的一点总结
- Hive SQL使用和数据加载的一点总结
- HIVE数仓数据血缘分析工具-SQL解析
- sql server 导出数据到 Azure Hbase / Hive 详细步骤
- Hadoop Hive基础SQL语法(DML 操作:元数据存储)
- 使用POI读取Excel内容(一)
- isis原理及介绍
- NYOJ-709-异形卵
- Find TwoBee 寻找小蜜蜂
- Verilog HDL-1
- Hive SQL 数据去重简析
- linux服务器部署应用程序
- 网络编程2
- 时钟
- 算法初探
- 八大排序
- 关于linux USB WIFI 的一些内容
- Ubuntu 16.04下安装Bunlder和PMVS(CMVS)---很重要
- 回文(字符串)