在我們使用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; #多個字段之間通過逗號去重