Hive作為一種高效的數據倉庫解決方案,可以用于大量數據的存儲和查詢操作。在數據倉庫中,經常會遇到需要將復雜的Json數據進行解析、處理和存儲的問題。本文將介紹如何使用Hive加載list數組里Json數據。
create table if not exists json_table( id int, json_arr array) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '|' STORED AS TEXTFILE;
上述代碼中,我們創建了一個名為json_table的表,該表包括id和json_arr兩個字段。其中,json_arr字段是Json數組類型,且每個Json字符串之間以“|”分隔。
insert into json_table values(1, '{ "name": "Tom", "age": 18, "address": { "province": "北京", "city": "北京市", "district": "朝陽區" } }|{ "name": "Lucy", "age": 20, "address": { "province": "上海", "city": "上海市", "district": "浦東新區" } }|{ "name": "Jack", "age": 22, "address": { "province": "廣東", "city": "深圳市", "district": "南山區" } }');
接下來,我們往json_table表里插入了一條數據,包括三個人的信息:名字、年齡和地址。其中,每個人的信息用Json字符串的形式表示,三個人的Json字符串之間以“|”分隔。
select id, get_json_object(ja, '$.name') as name, cast(get_json_object(ja, '$.age') as int) as age, get_json_object(ja, '$.address.province') as province, get_json_object(ja, '$.address.city') as city, get_json_object(ja, '$.address.district') as district from ( select id, explode(json_arr) as ja from json_table ) t;
最后,我們使用Hive內置的get_json_object函數對Json字符串進行解析,獲取每個人的名字、年齡和地址信息。注意,上述代碼中,我們使用了explode函數將Json數組拆分為多條數據,以便于對每個人的信息進行單獨的處理和解析。
上一篇c json格式