在配置单元表中加载json文件

vs3odd8k  于 2021-06-28  发布在  Hive
关注(0)|答案(3)|浏览(381)

我有一个类似于下面的json文件,我想用解析的格式加载到一个配置单元表中,我可以选择哪些选项。
如果它是avro,那么我可以直接使用avroserde。但本例中的源文件是json。

  1. {
  2. "subscriberId":"vfd1234-07e1-4054-9b64-83a5a20744db",
  3. "cartId":"1234edswe-6a9c-493c-bcd0-7fb71995beef",
  4. "cartStatus":"default",
  5. "salesChannel":"XYZ",
  6. "accountId":"12345",
  7. "channelNumber":"12",
  8. "timestamp":"Dec 12, 2013 8:30:00 AM",
  9. "promotions":[
  10. {
  11. "promotionId":"NEWID1234",
  12. "promotionContent":{
  13. "has_termsandconditions":[
  14. "TC_NFLMAXDEFAULT16R103578"
  15. ],
  16. "sequenceNumber":"305",
  17. "quantity":"1",
  18. "promotionLevel":"basic",
  19. "promotionDuration":"1",
  20. "endDate":"1283142400000",
  21. "description":"Regular Season One Payment",
  22. "active":"true",
  23. "disableInOfferPanel":"true",
  24. "displayInCart":"true",
  25. "type":"promotion",
  26. "frequencyOfCharge":"weekly",
  27. "promotionId":"NEWID1234",
  28. "promotionIndicator":"No",
  29. "shoppingCartTitle":"Regular Season One Payment",
  30. "discountedPrice":"0",
  31. "preselectedInOfferPanel":"false",
  32. "price":"9.99",
  33. "name":"Regular Season One Payment",
  34. "have":[
  35. "CatNFLSundayMax"
  36. ],
  37. "ID":"NEWID1234",
  38. "startDate":"1451365600000",
  39. "displayInOfferPanel":"true"
  40. }
  41. }
  42. ]
  43. }

我确实试着用 org.openx.data.jsonserde.JsonSerDe ,但它没有显示数据。

  1. CREATE EXTERNAL TABLE test1
  2. (
  3. SUBSCRIBER_ID string,
  4. CART_ID string,
  5. CART_STAT_NAME string,
  6. SLS_CHAN_NAME string,
  7. ACCOUNT_ID string,
  8. CHAN_NBR string,
  9. TX_TMSTMP string,
  10. PROMOTION ARRAY<STRING>
  11. )
  12. ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
  13. LOCATION '<HDFS location where the json file is place in single line>';
s4n0splo

s4n0splo1#

不太清楚 JsonSerDe 您正在使用。但这是这个 JsonSerDe 您可以使用hive-json-serde

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

如何构建jar。maven应该安装在你的电脑上,然后像这样运行命令。

  1. C:\Users\User1\Downloads\Hive-JSON-Serde-develop\Hive-JSON-Serde-develop>mvn -Phdp23 clean package.
  2. -Phdp23 is hdp2.3 it should be replaced with your hadoop version.

或者如果你想使用内置的 JsonSerde 如果您正在寻找一个如何使用的示例,请参阅这个blog hive json serde示例。
我建议您也验证json文件。json验证器

展开查看全部
vm0i2vca

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 ,

  1. ADD JAR /path/to/jar/;

您可以从mvn存储库下载它,也可以手动查找它。
那么Hive桌应该是这样的

  1. CREATE EXTERNAL TABLE test1
  2. (
  3. SUBSCRIBER_ID string,
  4. CART_ID string,
  5. CART_STAT_NAME string,
  6. SLS_CHAN_NAME string,
  7. ACCOUNT_ID string,
  8. CHAN_NBR string,
  9. TX_TMSTMP string,
  10. PROMOTION ARRAY<STRING>
  11. )
  12. ROW FORMAT SERDE
  13. 'org.apache.hive.hcatalog.data.JsonSerDe'
  14. LOCATION '<HDFS location where the json file is place in single line>';
展开查看全部
wmvff8tz

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;

相关问题