hive 存储,解析,处理json数据
hive 处理json数据总体来说有两个方向的路走
- 将json以字符串的方式整个入Hive表,然后通过使用UDF函数解析已经导入到hive中的数据,比如使用LATERAL VIEW json_tuple的方法,获取所需要的列名。
- 在导入之前将json拆成各个字段,导入Hive表的数据是已经解析过得。这将需要使用第三方的SerDe。
-
第一种:
-
get_json_object(string json_string, string path)
第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;如果输入的json字符串无效,那么返回NULL。
每次只能返回一个数据项。{"id": 1701439105,"ids": [2154137571,3889177061,1496915057,1663973284],"total_number": 493} CREATE TABLE IF NOT EXISTS tmp_json_test ( json string ) STORED AS textfile ; load data local inpath '/root/hivedata/json_test.txt' overwrite into table tmp_json_test; select get_json_object(t.json,'$.id'), get_json_object(t.json,'$.total_number') from tmp_json_test t ;
-
lateral view json_tuple
select t2.* from tmp_json_test t1 lateral view json_tuple(t1.json, 'id', 'total_number') t2 as c1, c2;
-
第二种
{"id": 1701439105,"ids": [2154137571,3889177061,1496915057,1663973284],"total_number": 493}
http://www.congiu.net/hive-json-serde/ add jar /root/hivedata/json-serde-1.3.7-jar-with-dependencies.jar; CREATE TABLE tmp_json_array ( id string, ids array<string>, `total_number` int) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS TEXTFILE;
load data local inpath '/root/hivedata/json_test.txt' overwrite into table tmp_json_array;
-