1

我有一个如下所示的 JSON 文件,我想将其加载到具有解析格式的 HIVE 表中,我可以选择哪些选项。

如果是 AVRO,那么我可以直接使用 AvroSerDe。但本例中的源文件是 JSON。

{  
   "subscriberId":"vfd1234-07e1-4054-9b64-83a5a20744db",
   "cartId":"1234edswe-6a9c-493c-bcd0-7fb71995beef",
   "cartStatus":"default",
   "salesChannel":"XYZ",
   "accountId":"12345",
   "channelNumber":"12",
   "timestamp":"Dec 12, 2013 8:30:00 AM",
   "promotions":[  
      {  
         "promotionId":"NEWID1234",
         "promotionContent":{  
            "has_termsandconditions":[  
               "TC_NFLMAXDEFAULT16R103578"
            ],
            "sequenceNumber":"305",
            "quantity":"1",
            "promotionLevel":"basic",
            "promotionDuration":"1",
            "endDate":"1283142400000",
            "description":"Regular Season One Payment",
            "active":"true",
            "disableInOfferPanel":"true",
            "displayInCart":"true",
            "type":"promotion",
            "frequencyOfCharge":"weekly",
            "promotionId":"NEWID1234",
            "promotionIndicator":"No",
            "shoppingCartTitle":"Regular Season One Payment",
            "discountedPrice":"0",
            "preselectedInOfferPanel":"false",
            "price":"9.99",
            "name":"Regular Season One Payment",
            "have":[  
               "CatNFLSundayMax"
            ],
            "ID":"NEWID1234",
            "startDate":"1451365600000",
            "displayInOfferPanel":"true"
         }
      }
   ]
}

我确实尝试使用创建表org.openx.data.jsonserde.JsonSerDe,但它没有向我显示数据。

CREATE EXTERNAL TABLE test1
(
SUBSCRIBER_ID string,
CART_ID string,
CART_STAT_NAME string,
SLS_CHAN_NAME string,
ACCOUNT_ID string,
CHAN_NBR string,
TX_TMSTMP string,
PROMOTION ARRAY<STRING>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '<HDFS location where the json file is place in single line>';
4

4 回答 4

1

如果你阅读官方文档

当您使用 hive 0.12 及更高版本时,请使用hive-hcatalog-core,

注意:对于 0.12 之前的 Hive 版本,Amazon 在 s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar 提供了 JSON SerDe。

你应该先添加罐子hive-hcatalog-core

ADD JAR /path/to/jar/;

您可以从mvn 存储库下载它或手动找到它。

那么蜂巢表应该看起来像

CREATE EXTERNAL TABLE test1
(
SUBSCRIBER_ID string,
CART_ID string,
CART_STAT_NAME string,
SLS_CHAN_NAME string,
ACCOUNT_ID string,
CHAN_NBR string,
TX_TMSTMP string,
PROMOTION ARRAY<STRING>
)
ROW FORMAT SERDE
  'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION '<HDFS location where the json file is place in single line>';
于 2017-07-31T22:05:50.027 回答
1

不确定JsonSerDe您使用的是 . 在这里JsonSerDe你可以为你使用。Hive-JSON-Serde

hive> add jar /User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar;
Added [/User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar] to class path
Added resources: [/User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar]
hive> use default;
OK
Time taken: 0.021 seconds
hive> CREATE EXTERNAL TABLE IF NOT EXISTS json_poc (
> alertHistoryId bigint, entityId bigint, deviceId string, alertTypeId int,  AlertStartDate string
> )
> ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
> LOCATION '/User/User1/sandeep_poc/hive_json';
OK
Time taken: 0.077 seconds
hive> select * from json_poc;
OK
123456  123     123     1       jan 04, 2017 2:46:48 PM
Time taken: 0.052 seconds, Fetched: 1 row(s)

如何构建罐子。 Maven 应该安装在您的 PC 上,然后像这样运行命令。

C:\Users\User1\Downloads\Hive-JSON-Serde-develop\Hive-JSON-Serde-develop>mvn -Phdp23 clean package.

-Phdp23 is hdp2.3 it should be replaced with your hadoop version.

或者,如果您想使用内置JsonSerde 的 get_json_object json_tuple ,如果您正在寻找如何使用的示例,请参阅此博客Hive-JSON-Serde 示例

我也会推荐验证你的 JSON 文件。JSON 验证器

于 2017-01-04T09:21:16.337 回答
1

在 hive 表中加载 JSON 文件数据的步骤

1]在蜂巢中创建表

hive> 创建表 JsonTableExample(数据字符串);

2] 将 JSON 文件加载到配置单元表中

hive> 将路径中的数据 '/home/cloudera/testjson.json' 加载到表 JsonTableExample 中;

3] 如果我们应用普通的 select * from JsonTableExample; 我们将获得所有数据。这不是一个有效的解决方案,因为我们必须遵循第 4 步。

4] 使用get_json_object() 函数选择数据

hive> select get_json_object(data,'$.id') as id, get_json_object(data,'$.name') as name from JsonTableExample;

于 2018-07-05T09:01:54.170 回答
0

对于 Hive 的许多版本,启用 JSON 处理的最佳方式可能是使用org.apache.hive.hcatalog.data.JsonSerDe前面提到的。这是开箱即用的功能。但是,对于 CDH6 和 HDP3 的某些版本,有一个新功能,其中 JSON 是一等公民。这存在于 Apache Hive 4.0 及更高版本中。

CREATE TABLE ... STORED AS JSONFILE;

请注意,每个 JSON 对象必须在自己的行上(没有换行符)。

{"name"="john","age"=30}
{"name"="sue","age"=32}

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

于 2021-02-18T15:20:50.140 回答