Hive HQL的轉換過程

2021-09-29 01:49:40 字數 1744 閱讀 8227

二:具體轉化過程

一:hive的執行過程概述:

操作符列表

hive 編譯器的工作職責:

優化器的型別:

​ 帶①符號的,優化目的都是盡量將任務合併到乙個 job 中,以減少 job 數量,帶②的 優化目的是儘量減少 shuffle 資料量

二:具體轉化過程

1)join

select pv.pageid, u.age from page_view pv join

user u on pv.userid = u.userid;

實現過程:

map:

以 join on 條件中的列作為 key,如果有多個列,則 key 是這些列的組合

以 join 之後所關心的列作為 value,當有多個列時,value 是這些列的組合。在 value 中還會包含表的 tag 資訊,用於標明此 value 對應於哪個表

按照 key 進行排序

shuffle:

根據 key 的值進行 hash,並將 key/value 對按照 hash 值推至不同對 reduce 中

reduce:

reducer 根據 key 值進行 join 操作,並且通過 tag 來識別不同的表中的資料,這裡page_view只能提供給pageid,user只能提供age,所以需要兩表連線,當經歷過shuffle過程之後,value中的資料都是屬於同乙個key的,所以只需要對tag值不同的value值進行join即可

注意:在hive中執行join,當較小表在一定的範圍內(set hive.mapjoin.smalltable.filesize=25000000,大約是23.8m)執行的是mapjoin,其他的執行的是reducejoin;

類似於join的執行流程,將group by 後面的字段作為key,將group by前面的聚合函式作為value;key值相同的,value加一;shuffle過程中,key值相同的歸在一起,有幾個key值相同的,value加幾;

//按照age分組,統計每個組中不重複的pageid有多少個

NAT(NAPT)位址轉換過程

整理自nat位址轉換過程 注 本文實質講的是napt network address port translation 即網路埠位址轉換。napt與動態位址nat不同,它將內部連線對映到外部網路中的乙個單獨的ip位址上,同時在該位址上加上乙個由nat裝置選定的tcp埠號。napt算得上是一種較流行的...

int與uint轉換過程中值的變化

int型別的資料轉化為uint型別 因為int是帶符號的型別,當int是正數時,int型別資料轉化為uint時不發生改變。當int是負數時,int型別資料轉化為uint型別時,值就要發生變化。但轉化的過程並不是去掉前面的負號,例如 int a 1 uint b uint a 這時b的結果並不是1 而...

邏輯位址到實體地址的轉換過程

cpu將乙個虛擬記憶體空間中的位址轉換為實體地址,需要進行兩步 首先將給定乙個邏輯位址 其實是段內偏移量,這個一定要理解!cpu要利用其段式記憶體管理單元,先將為個邏輯位址轉換成乙個執行緒位址,再利用其頁式記憶體管理單元,轉換為最終實體地址。實體地址 physical address 用於記憶體晶元...