将jar / path添加到/ hive-serdes-1.0-SNAPSHOT.jar;
创建EXTERNAL TABLE学生
(id int,student_id INT,输入STRING,得分DOUBLE
)
STORED BY'com.mongodb.hadoop.hive.MongoStorageHandler'
WITH 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。得到了相同的结果。
答案 0 :(得分:0)
根据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。