JSON对HIVE摄入

时间:2016-02-23 06:32:09

标签: json mongodb hadoop hive

  

将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。得到了相同的结果。

1 个答案:

答案 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。