3.示例
寬表儲存資料,必然會面臨乙個問題:一對多,資料是n倍的儲存。將會多占用n倍空間。而這些源資料入庫的時候,在檔案中存放時,也可能使用json格式。
遇到這種情況,使用json_tuple來解析json資料是乙個非常不錯的方法。如果只是查詢json中某乙個key的值,那麼使用get_json_object是個更好的選擇。
lateral view 通常和split, explode等udtf一起封裝使用,它能夠將一行資料拆分成多行資料,在此基礎上可以對拆分後的資料進行聚合.
該函式的作用就是通過udtf相關函式把一行拆分成一行或者多行的結果進行聚合,產生乙個支援別名表的虛擬表。
語法結構如下:
ateral view udtf(expression) alias_table_name as columns(',', columns)*
explode 將陣列、列表、map中每個元素轉換為同一列的不同行,可以理解為行轉列,處理的結果以**的形式輸出。explode 只能處理陣列(列表)或者map結構。 使用方法非常簡單:explode(資料或者列表或者map結構資料)。
比如陣列: [1,2,3].可以轉換為
1而map結構,比如字典: 可以轉換成:23
a 1各位可以執行下面兩個查詢語句塊,了解explode的效果:b 2c 3
select array(1,2,3);下面通過str_to_map1select explode(array(1,2,3));
來實現map結構
select str_to_map(concat('a:',1,'&b:',2,'&c:',3),'&',':');select str_to_map(concat('a:',1,'^b:',2,'^c:',3),'\\^',':');
select explode(str_to_map(concat('a:',1,'&b:',2,'&c:',3),'&',':'));
json_tuple 從json格式資料中,通過指定的keys 來讀取相應的values. 讀取的結果以**的形式輸出。語法結構如下:
使用方法如下:json_tuple(資料來源,json中的key1,key2,….). 比如:
select json_tuple('','a','b');
下面是將json資料轉換成表結構的示例。
1關於map,可以通過函式str_to_map來實現,也可以在建表時定義。這裡使用str_to_map 來進行測試. str_to_map(字串引數, 分隔符1, 分隔符2),使用兩個分隔符將文字拆分為鍵值對。 分隔符1將文字分成k-v對,分隔符2分割每個k-v對。對於分隔符1預設分隔符是 ',',對於分隔符2預設分隔符是 '='。
author: halberd.lee
created: 2020-04-09 thu 13:48
validate
hive處理json資料
今天練習一下在hive中使用get json object這個函式,首先建立乙個表將json格式的資料匯入 create table json01 line string 將資料匯入 load data local inpath home hadoop json test into table js...
hive處理json資料
1.載入hcatalog包,這個包已經在hive目錄檔案中 hive add jar hcatalog share hcatalog hive hcatalog core 1.2.0.jar 2.建立處理json格式資料的表 注意 org.apache.hive.hcatalog.data.json...
Hive處理json格式資料
1 資料示例 假設info表中存有兩個字段,分別是id,content content 2 使用hive內建函式 get json object json tuple regexp replace 3 說明 使用get json object 解析content,獲取properties,使用reg...