HIVE縱表變橫表

2021-10-24 23:03:21 字數 1716 閱讀 6096

有這這樣一張表t_buy_buyer_time_hongbao_asc

使用者id 次序 購買時間

25560 1 1325345254

25560 2 1331043510

25560 3 1331999999

25720 1 1320381121

25720 2 1320461154

25720 3 1320639271

26840 1 1337214675

26840 2 1337214694

26840 3 1337214768

37160 1 1328583075

需求是在某張表中羅列出某使用者的第一次購買時間,第二次購買時間,第三次購買時間

比如使用者id 第一次購買 第二次購買 第三次購買

25560 1325345254 1331043510 1331999999

25720 1320381121 1320461154 1320639271

26840 1337214675 1337214694 1337214768

…於是呢 打乙個很形象的比方就是 把豎表變橫表的要求

使用兩種hive指令碼來查詢hive1

select

tb1.uid as uid,

tb1.order_time as s1t_deal_time,

tb2.order_time as c2d_deal_time,

tb3.order_time as r3d_deal_time

from

(select * from t_buy_buyer_time_hongbao_asc where row_num=1 and pt=『20121010000000』)tb1

left outer join

(select * from t_buy_buyer_time_hongbao_asc where row_num=2 and pt=『20121010000000』)tb2

on tb1.uid=tb2.uid

left outer join

(select * from t_buy_buyer_time_hongbao_asc where row_num=3 and pt=『20121010000000』)tb3

on tb1.uid=tb3.uid

本hive指令碼只需要乙個job,執行時間376.005 s

hive2

select

tb1.uid as uid,

s1t_deal_time,

c2d_deal_time,

r3d_deal_time

from

(select uid,sum(if(row_num=1,order_time,0)) as s1t_deal_time,sum(if(row_num=2,order_time,0)) as c2d_deal_time,sum(if(row_num=3,order_time,0)) as r3d_deal_time from t_buy_buyer_time_hongbao_asc where pt=『20121010000000』 group by uid)tb1

本hive指令碼也只需要乙個job,執行時間是328.733 s

額,不要嫌慢,在hadoop上跑資料的確是很慢很慢的

其實執行效率被優化了五十多s,但疑問是為什麼hive1會只生成乙個job呢?原因在於我們的連線條件是同一張表的同乙個uid,於是呢,hive會做乙個效率優化。

sql實現縱表變橫表

網上所有的縱橫表轉換都是千篇一律的,參考價值都不大,而且只適合那種資料量固定的學生成績表的橫縱轉化,但是當真正遇到大資料量的批量轉換的時候是行不通的,下面介紹一種相對靈活的大量資料的橫縱表轉換 表結構 如上圖所示,其中index id中以0結尾的表示的是服務名,以1結尾的表示裝置rac名稱,2結尾的...

mysql把結果變橫表 mysql 橫表與縱表互轉

一 認識橫表與縱表 橫表就是普通的建表方式,如乙個表結構為 主鍵 欄位1 欄位2 欄位3。如果變成縱表後,則表結構為 主鍵 字段 字段值,字段 則為字段1 欄位2 欄位3。縱表對從資料庫到記憶體的對映效率是有影響的,但細一點說也要一分為二 縱表的初始對映要慢一些 縱表的變更的對映可能要快一些,如果只...

橫表縱表轉換

橫表就是普通的建表方式,如表結構為 主鍵 欄位1 欄位2 欄位3.如果變成縱表後,則表結構為 主鍵 字段 字段值。而字段 則為字段1 欄位2 欄位3.具體為電信行業的例子。以使用者帳單表為例,一般出賬時使用者有很多費用,其資料一般儲存為 時間,客戶id,費用科目,費用。這種儲存結構一般稱為縱表,其特...