1.注意json数据格式,键必须是双引号
这里用的表数据如下:price,name,shop,comment,p,op,m
2.要把每一个字段值导入,不能直接导入,需要借助mapreducer,一行一行将对应值写入表。
首先建立一个临时表,将一行json数据做一个字段
create table tmpjson(line string) row format delimited fields terminated by "\n";
3.将json数据导入到表tmpjson中,可以用load data 也可以直接上传文件到表文件夹。(我的数据文件在hadoop 根目录下)
load data inpath "/goods.txt" into table tmpjson;
或者
将goods.txt 移动到表文件夹下
hadoop fs -mv /goods.txt /user/hive/warehouse/tmpjson
4.创建一个包含json数据所有字段的表
create table goods(price double,name string,shop string,comment bigint,p double,op double,m double)
5.用json函数get_json_object()解析tmpjson表的数据并插入到goods表中,或者用json_tuple
(注意:插入时循序必须和建立goods表时字段顺序一致)
insert overwrite table goods select get_json_object(line,"$.price") , get_json_object(line,"$.name") , get_json_object(line,"$.shop") , get_json_object(line,"$.comment") , get_json_object(line,"$.p") , get_json_object(line,"$.op") , get_json_object(line,"$.m") from tmp_json;
或用
insert overwrite table test select json_tuple(line,'price','name','shop','comment','p','op','m')as(price,name,shop,comment,p,op,m) from tmp_json;
6.查看goods的数据是否成功
select * from goods
注意:如果数据有null,则json数据可能存在空行