我有一个类似于下面的json文件,我想用解析的格式加载到一个配置单元表中,我可以选择哪些选项。
如果它是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>';
3条答案
按热度按时间s4n0splo1#
不太清楚
JsonSerDe
您正在使用。但这是这个JsonSerDe
您可以使用hive-json-serde如何构建jar。maven应该安装在你的电脑上,然后像这样运行命令。
或者如果你想使用内置的
JsonSerde
如果您正在寻找一个如何使用的示例,请参阅这个blog hive json serde示例。我建议您也验证json文件。json验证器
vm0i2vca2#
如果你看了官方文件
在使用hive 0.12及更高版本时,请使用
hive-hcatalog-core
,注意:对于0.12之前的hive版本,amazon提供了一个json serde,位于s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar。
你应该先把jar加进去
hive-hcatalog-core
,您可以从mvn存储库下载它,也可以手动查找它。
那么Hive桌应该是这样的
wmvff8tz3#
在配置单元表中加载json文件数据的步骤
1] 在配置单元中创建表
配置单元>创建表jsontableexample(数据字符串);
2] 将json文件加载到配置单元表中
hive>load data inpath'/home/cloudera/testjson.json'到表jsontableexample中;
3] 如果我们应用normal,则从jsontableexample中选择*;我们会得到所有的数据。这不是一个有效的解决方案,因为我们必须遵循步骤4。
4] 使用get\u json\u object()函数选择数据
hive>从jsontableexample中选择getjson对象(data,'$.id')作为id,getjson对象(data,'$.name')作为name;