Hive處理表中重復數據


在我們使用Kylin構建Cube時,常常會因為表中有某些重復的字段,導致運行失敗,這時我們需要到原表中處理哪些重復的數據。

處理的方式大致有以下幾種:

(1)hive表中某些數據是整行的重復,而且字段過多時distinct *:

如:

insert overwrite table stu_tab
select distinct * from stu_tab;

通過過濾不同的行,將原表進行覆蓋。

上傳實際工作中遇到的問題,如下其中就一個字段不重復,其他均重復,導致kylin構建失敗,根據情況我們將含有2的那行數據進行刪除;

insert overwrite table sys_cus_hz_20210127
select distinct * from sys_cus_hz_20210127 where consumlevel!=2;

之后再次運行Cube成功。

(2)當表中字段不多,而且數據是某些字段重復,可通過row_number():

insert overwrite table emp_tab
select id,name,sal from (
select * ,
row_number() over(partition by id order by sal desc) rank
from emp_tab)t1
where t1.rank=1;

(3)在某些情況中我們不是需要全部字段,而是僅僅過濾出某些不重復的字段:

select distinct id from stu_tab;
#單個字段去重
select distinct id,name from stu_tab;
#多個字段之間通過逗號去重

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM