【Hive】數據去重


實現數據去重有兩種方式 :distinct 和 group by

1.distinct消除重復行

distinct支持單列、多列的去重方式。
單列去重的方式簡明易懂,即相同值只保留1個。
多列的去重則是根據指定的去重的列信息來進行,即只有所有指定的列信息都相同,才會被認為是重復的信息。

(1)作用於單列

  select distinct name from A    //對A表的name去重然后顯示

(2)作用於多列

  select distinct id,name from A   //對A表的id和name去重然后顯示

注意,distinct作用於多列的時候只在開頭加上即可,並不用每個字段都加上。

     distinct必須在開頭,在中間是不可以的,會報錯。

  select id,distinct name from A   //錯誤

(3)配合count使用

  select count(distinct name) from A  //對A表的不同的name進行計數

2.group by 分組語句

    select name from A group by name   //跟上述等價,對name分組,相當於去重。

    在使用group by的時候,前邊一般會有聚合語句,例如sum,一些沒有聚合的字段必須要加到group by 后邊。

   select a,sum(b) from A group by a   //后邊必須要有a,否則報錯  

3.區別

 其實二者沒有什么可比性,但是對於不包含聚集函數的GROUP BY操作來說,和DISTINCT操作是等價的。不過雖然二者的結果是一樣的,但是二者的執行計划並不相同。

 distinct只是將重復的行從結果中出去; 

 group by是按指定的列分組,一般這時在select中會用到聚合函數。

 distinct是把不同的記錄顯示出來。 

 group by是在查詢時先把紀錄按照類別分出來再查詢。

 group by 必須在查詢結果中包含一個聚集函數,而distinct不用。

 


免責聲明!

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



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