我正在使用hive,我需要以json格式添加数据。我使用https://github.com/rcongiu/Hive-JSON-Serde库。它从文件加载hive中的数据。
~$ cat test.json
{"text":"foo","number":123}
{"text":"bar","number":345}
$ hadoop fs -put -f test.json /user/data/test.json
$ hive
hive> CREATE DATABASE test;
hive> CREATE EXTERNAL TABLE test ( text string )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/user/data';
hive> SELECT * FROM test;
OK
foo 123
bar 345
但我需要从查询中加载数据,例如:
insert into table test values {"text": "abc", number: 666}
谁知道这是怎么回事?
答案 0 :(得分:0)
SerDe实际上适用于从包含数据的文件中读取数据的外部表。因此,它不会帮助您直接插入json数据,并且您提供的插入查询作为示例将无法正常工作。我建议您应该将数据写入hdfs上的文件,并在包含该文件的文件夹上创建外部表,或者解析传入的数据,以便将其作为列插入。
答案 1 :(得分:0)
但是,如果有人在寻找答案,这个问题似乎很老了
我尝试了另一种方法,如下所示:
Create table test (text string);
LOAD data inpath 'path/test.json' INTO TABLE test;
insert into table test values ("{'text':'abc','number':666}");
唯一的区别是,当您需要加载值时,它将类似于:
select get_json_object(str,'$.text') as text1, get_json_object(str,'$.number') as number1 from test;