Hive執行UDF UDTF HQL指令碼解析

2021-10-24 20:32:17 字數 2190 閱讀 7385

insert overwrite table dwd_base_event_log partition(dt='2020-03-10'

)select

base_analizer(line,

'mid'

) as mid_id,

base_analizer(line,

'uid'

) as user_id,

base_analizer(line,

'vc'

) as version_code,

base_analizer(line,

'vn'

) as version_name,

base_analizer(line,

'l') as lang,

base_analizer(line,

'sr'

) as source,

base_analizer(line,

'os'

) as os,

base_analizer(line,

'ar'

) as area,

base_analizer(line,

'md'

) as model,

base_analizer(line,

'ba'

) as brand,

base_analizer(line,

'sv'

) as sdk_version,

base_analizer(line,

'g') as gmail,

base_analizer(line,

'hw'

) as height_width,

base_analizer(line,

't' base_analizer(line,

'nw'

) as network,

base_analizer(line,

'ln'

) as lng,

base_analizer(line,

'la'

) as lat,

event_name,

event_json,

base_analizer(line,

'st'

) as server_time

from ods_event_log lateral view flat_analizer(base_analizer(line,

'et'

)) tmp_flat as event_name,event_json

where dt='2020-03-10' and base_analizer(line,

'et'

)<>''

;

以此為例,將ods_event_log表的『2020-03-10』分割槽資料的 並且通過udf base_analizer()解析key為 『et』的字段不為空 的資料插入 表dwd_base_event_log 的2020-03-10分割槽。

base_analizer():udf 目的將原始資料解析成json,再根據傳入的引數解析出公共欄位mid uid cv 等

flat_analizer():udtf 目的解析出資料中含有的事件欄位en ,即一條ods_event_log欄位包含由多個en欄位組成的json集合。而此處是將其全部解析成單個。[1,2,3]-> 1,2,3

lateral view flat_analizer(base_analizer(line,『et』)) tmp_flat as event_name,event_json

lateral view :lateral view用於和split, explode等udtf一起使用,它能夠將一行資料拆成多行資料,在此基礎上可以對拆分後的資料進行聚合。lateral view首先為原始表的每行呼叫udtf,utdf會把一行拆分成一或者多行,lateral view再把結果組合,產生乙個支援別名表的虛擬表。

此句話目的是將

name

score

小明[1,2,3]

小花[7,7,7]

轉成name

score小明1

小明2小明3

小花7小花7

小花7

Hive 指令碼執行

繼上篇ddl中load的資料繼續進行指令碼操作。hive執行指令碼 hive e sql語句 會將查詢的結果列印在控制台上。hive e sql語句 會將查詢的結果重定向到 檔案中,會顯示ok和抓取的資料條數 hive s e sql語句 會將查詢的結果重定向到 檔案中,不會顯示ok和抓取的資料條數...

Hive 執行計畫

執行語句 hive explain select s.id,s.name from student s left outer join student tmp st on s.name st.name 結果,紅色字型為我新增的注釋 hive explain select s.id,s.name fr...

Hive 推測執行

在分布式集群環境下,因為程式bug 包括hadoop本身的bug 負載不均衡或者資源分布不均等原因,會造成同乙個作業的多個任務之間執行速度不一致,有些任務的執行速度可能明顯慢於其他任務 比如乙個作業的某個任務進度只有50 而其他所有任務已經執行完畢 則這些任務會拖慢作業的整體執行進度。為了避免這種情...