hive 列表去重 Hive 資料去重

2021-10-13 06:31:45 字數 1031 閱讀 3165

實現資料去重有兩種方式 :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不用。

Hive資料去重

hive資料去重 insert overwrite table ta customers select t.ta id,t.ta date from select ta id,ta date row number over distribute by ta id sort by ta date de...

hive 列表去重 HIVE的多表查詢

先來看看union all語句的使用 union all語句將倆個表中相同的字段拼接在一起進行表的查詢,注意的是union all不去重,資料會重複,我們來看看網路上的一些案例 準備表create external table if not exists temp uniontest ta a1 s...

hive 去重 字串 hive 函式

substr string a,int start,int len substring string a,intstart,int len 用法一樣,三個引數 返回值 string 說明 返回字串a從start位置開始,長度為len的字串,下標預設為1.若沒有長度預設到結尾。round round ...