方式一:
select
t2.user_log_acct
,t2.item_sku_id
,t2.time
from
(select *
from
distribute by item_sku_id
sort by user_log_acct,item_sku_id,time desc
) t2
where row_number(t2.user_log_acct, t2.item_sku_id) = 1
;
方式二:
--由於item_sku_id資料量比較大,distribute by item_sku_id 生成的reduce數量比較多,效能比較低;可以修改如下,100可以根據不同情況來調:
select
t2.user_log_acct
,t2.item_sku_id
,t2.time
from
(select *
from
distribute by pmod(item_sku_id, 100)
sort by user_log_acct,item_sku_id,time desc
) t2
where row_number(t2.user_log_acct, t2.item_sku_id) = 1
;
方式三:
--由於有可能有些hive版本不知道上面兩種直接where後面row_number(t2.user_log_acct, t2.item_sku_id) = 1
select
t3.user_log_acct
,t3.item_sku_id
,t3.time
from
(select
t2.user_log_acct
,t2.item_sku_id
,t2.time
,row_number(t2.user_log_acct, t2.item_sku_id) r_num
from
(select *
from
distribute by pmod(item_sku_id, 100)
sort by user_log_acct,item_sku_id,time desc
) t2
) t3
where t3.r_num = 1
;
注意點:
1.使用子查詢保證row_number在reduce端執行。
2.使用distribute by item_sku_id sort by user_log_acct,item_sku_id,time desc來保證item_sku_id相同的記錄被分配到相同的reduce中。
hive sql中的json解析函式
函式語法 get json object json物件變數,json變數標識 第乙個引數為json物件變數,第二個引數使用 表示json變數標識,然後用 或讀取物件或陣列。eg 定義乙個資料字典 dataframe,dataframe bike 解析字典中的元素資訊 select get json ...
Hive SQL獲取表中複雜結構資料
資料格式基本如下 col1 totalcount 6,couponexplain 優惠 x選 u 服 xx月 每 x次。方法一 當欄位col1是string型別時,我們可以直接使用中括號來獲取,select col1 key的名字 from ods.ods x limit 1000方法二 當欄位co...
hive sql優化整理
hive sql優化方法引數一些整理,方便快速查詢使用 1.map數量與reduce數量的控制 輸入檔案大小指實際檔案大小,與檔案格式textfile,orc等無關,壓縮的檔案格式會小很多設定引數要適當調整 map數量控制 set hive.input.format org.apache.hadoo...