Hive Distinct 的實現原理

2021-10-08 21:25:38 字數 1064 閱讀 2636

select dealid,

count

(distinct uid) num from

order

group

by dealid;

當只有乙個distinct欄位時,如果不考慮map階段的hash groupby,只需要將groupby欄位和distinct欄位組合為map輸出key,利用mapreduce的排序,同時將groupby欄位作 為reduce的key,在reduce階段儲存lastkey即可完成去重。

如果有多個distinct欄位呢,如下面的sql:

select dealid,

count

(distinct uid)

,count

(distinct

date

)from

order

group

by dealid;

實現方式有兩種:

(1)如果仍然按照上面乙個distinct欄位的方法,即下圖這種實現方式,無法跟據uid和date分別排序,也就無法通過lastkey去重,仍然需要在reduce階段在記憶體中通過hash去重

(2)第二種實現方式,可以對所有的distinct欄位編號,每行資料生成n行資料,那麼相同欄位就會分別排序,這時只需要在reduce階段記錄lastkey即可去重。這種實現方式很好的利用了mapreduce的排序,節省了reduce階段去重的記憶體消耗,但是缺點是增加了shuffle的資料量。需要注意的是,在生成reduce value時,除第乙個distinct欄位所在行需要保留value值,其餘distinct資料行value欄位均可為空。

ios push實現的簡單實現步驟

其實push這個東西已經做了好幾次了,但是每次要做的時候總會先下意識地上網搜尋 因為個人覺得ios開發的時候證書和簽名實在是讓人頭疼,可能還是不夠熟悉整套ios開發與發布流程的原因 過些天專案裡要加push的推送功能,所以先做了下功課,大致記錄了步驟,免得到時候又忘記.a 本地鑰匙串生成證書請求檔案...

SAP BADI的實現2 實現BADI

1,建立實現體的容器 定義和實現badi有乙個共同的地方,就是都是需要建立乙個容器,我們不能新建乙個badi的實現,如果沒有先建立容器的話。在同乙個容器中,可以有多個badi實現,但是前提是要求他們都是屬於同乙個enhancement spot所對應的badi。2,badi類實現 在我們建立了bad...

查詢演算法的實現 C C 實現

存檔 1 include 2 include 3 define max 20 4 typedef int keytype 5 include search.h 6 intmain 754 printf n請重新輸入您的選擇 n 55 scanf d num 56 57return0 58 1 typ...