json - 为嵌套的 JSON 数据创建 Hive 表

标签 json hadoop hive hdfs

我无法将嵌套的 JSON 数据加载到 Hive 表中。有人可以帮我吗?以下是我尝试过的:

示例输入:

{"DocId":"ABC","User1":{"Id":1234,"Username":"sam1234","Name":"Sam","ShippingAddress":{"Address1":"123 Main St.","Address2":null,"City":"Durham","State":"NC"},"Orders":[{"ItemId":6789,"OrderDate":"11/11/2012"},{"ItemId":4352,"OrderDate":"12/12/2012"}]}}

在 hive (CDH3) 上:

ADD JAR /usr/lib/hive/lib/hive-serdes-1.0-SNAPSHOT.jar;

CREATE TABLE json_tab(
    DocId string,
    user1 struct<Id: int, Username: string, Name:string,ShippingAddress:struct<address1:string,address2:string,city:string,state:string>,orders:array<struct<ItemId:int,orderdate:string>>>
)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
STORED AS TEXTFILE;  

hive> select * from json_tab;
OK
NULL    null

我在这里得到 NULL

还尝试使用 HCatalog jar:

ADD JAR /home/training/Desktop/hcatalog-core-0.11.0.jar;

 CREATE TABLE json_tab(
    DocId string,
    user1 struct<Id: int, Username: string, Name:string,ShippingAddress:struct<address1:string,address2:string,city:string,state:string>,orders:array<struct<ItemId:int,orderdate:string>>>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';

但是我的 create table 语句面临以下错误:

FAILED: Error in metadata: Cannot validate serde: org.apache.hive.hcatalog.data.JsonSerDe FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

有人可以帮帮我吗?提前感谢您的帮助。

最佳答案

你可以使用org.openx.data.jsonserde.JsonSerDe类来获取json数据

你可以从http://www.congiu.net/hive-json-serde/1.3.6-SNAPSHOT/cdh4/下载jar文件

并执行以下步骤

add jar /path/to/jar/json-serde-1.3.6-jar-with-dependencies.jar;

CREATE TABLE json_tab(
    DocId string,
    user1 struct<Id: int, Username: string, Name:string,ShippingAddress:struct<address1:string,address2:string,city:string,state:string>,orders:array<struct<ItemId:int,orderdate:string>>>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe';

LOAD DATA LOCAL INPATH  '/path/to/data/nested.json' INTO TABLE json_tab;

SELECT DocId, User1.Id, User1.ShippingAddress.City as city,
User1.Orders[0].ItemId as order0id,
User1.Orders[1].ItemId as order1id from json_tab;


result
ABC     1234    Durham  6789    4352

关于json - 为嵌套的 JSON 数据创建 Hive 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45233084/

相关文章:

hadoop - 为什么 spark 抛出带有序列文件的 NotSerializableException org.apache.hadoop.io.NullWritable

hive - 在分区表上插入覆盖不会删除现有数据

sql - 从时间戳格式 "25/Nov/2016:15:48:01 +0000' 中检索月份

ios NSURLSession JSON 在 swift 中解析为 nil(在 obj-c 中正常)

javascript - 删除多个 JSON 对象的键/值对

hadoop - 限制 Application Master 请求的资源的属性

hadoop - 处理 hive 中的 Blob

ios - 如何编写简单的单元测试来测试 JSON 的解析?

json.unmarshal() - 返回 nil

apache - 一旦我已经在impala shell中,如何运行.sql文件?