使用配置单元JSON SerDe添加数据查询

使用配置单元JSON SerDe添加数据查询,json,hive,hiveql,Json,Hive,Hiveql,我正在使用hive,需要添加json格式的数据。我使用图书馆。它从文件加载配置单元中的数据 ~$ 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 (

我正在使用hive,需要添加json格式的数据。我使用图书馆。它从文件加载配置单元中的数据

~$ 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}

谁知道怎么做到这一点呢?

SerDe实际上是用于从包含数据的文件中读取数据的外部表。因此,它不会帮助您直接插入json数据,您作为示例给出的插入查询也不会这样工作。我建议您将数据写入hdfs上的文件,并在包含该文件的文件夹上创建一个外部表,或者解析传入的数据,以便将其作为列插入。

SerDe实际上是用于从包含数据的文件中读取数据的外部表。因此,它不会帮助您直接插入json数据,您作为示例给出的插入查询也不会这样工作。我建议您将数据写入hdfs上的文件,并在包含该文件的文件夹上创建一个外部表,或者解析传入的数据,以便将其作为列插入。

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

我尝试了以下另一种方法:

  • 创建表测试(文本字符串)
  • 将路径'path/test.json'中的数据加载到表test中
  • 插入表测试值(“{'text':'abc','number':666}”)
  • 唯一不同的是,当您需要加载值时,它将类似于:

    select get_json_object(str,'$.text') as text1, get_json_object(str,'$.number') as number1 from test;
    

    然而,如果有人在寻找答案,这个问题似乎很老:

    我尝试了以下另一种方法:

  • 创建表测试(文本字符串)
  • 将路径'path/test.json'中的数据加载到表test中
  • 插入表测试值(“{'text':'abc','number':666}”)
  • 唯一不同的是,当您需要加载值时,它将类似于:

    select get_json_object(str,'$.text') as text1, get_json_object(str,'$.number') as number1 from test;