Hive基础(十二)-hive 存储,解析,处理json数据

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,
`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;

你可能感兴趣的:(Hive基础(十二)-hive 存储,解析,处理json数据)