【问题标题】:JSON to HIVE ingestionJSON 到 HIVE 摄取
【发布时间】:2016-02-23 06:32:08
【问题描述】:
将jar /path 添加到/hive-serdes-1.0-SNAPSHOT.jar;
创建外部表学生
( id int, student_id INT, type STRING, score DOUBLE
)
由“com.mongodb.hadoop.hive.MongoStorageHandler”存储
使用 SERDEPROPERTIES ('mongo.columns.mapping'='{ "id":"_id",
"student_id":"student_id", "type":"type","score":"score" }')
TBLPROPERTIES('mongo.uri'='mongodb://****---****.nam.nsroot.net:*****/admin.student ');
我能够成功运行代码并提取数据。但是“id”字段被填充为 NULL。
我应该更改数据类型吗?我也试过 STRING。得到了同样的结果。
【问题讨论】:
标签:
json
mongodb
hadoop
hive
【解决方案1】:
根据mongo-hadoop Hive SerDe,ObjectId对应一个特殊的STRUCT实例。
与 ObjectId 对应的 Hive 字段必须是 STRUCT,其中包含字段 oid、STRING 和 bsontype、INT,仅此而已。 oid 是 ObjectId 的字符串,而 bsontype 应始终为 be 8。根据您的示例,它应该是:
CREATE EXTERNAL TABLE student
(id STRUCT<oid:STRING, bsontype:INT>, student_id INT, type STRING, score DOUBLE)
输出类似于:
{"oid":"56d6e0f6ff1f17f74ebbc16c","bsontype":8}
{"oid":"56d6e0f8ff1f17f74ebbc16d","bsontype":8}
...
以上测试使用:MongoDB v3.2.x、mongo-java-driver-3.2.2.jar、mongo-hadoop-core-1.5.0-rc0.jar、mongo-hadoop-hive-1.5。 0-rc0.jar。