使用Hive-JSON-SerDe添加数据查询

时间:2017-10-10 13:09:27

标签: json hive hiveql

我正在使用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}

谁知道这是怎么回事?

2 个答案:

答案 0 :(得分:0)

SerDe实际上适用于从包含数据的文件中读取数据的外部表。因此,它不会帮助您直接插入json数据,并且您提供的插入查询作为示例将无法正常工作。我建议您应该将数据写入hdfs上的文件,并在包含该文件的文件夹上创建外部表,或者解析传入的数据,以便将其作为列插入。

答案 1 :(得分:0)

但是,如果有人在寻找答案,这个问题似乎很老了

我尝试了另一种方法,如下所示:

  1. Create table test (text string);
  2. LOAD data inpath 'path/test.json' INTO TABLE test;
  3. 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;