JSON 到 HIVE 摄取

Posted

技术标签:

【中文标题】JSON 到 HIVE 摄取【英文标题】:JSON to HIVE ingestion 【发布时间】: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。得到了同样的结果。

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于JSON 到 HIVE 摄取的主要内容,如果未能解决你的问题,请参考以下文章

数据摄取问题 hive:java.lang.OutOfMemoryError:无法创建新的本机线程

XML使用Serde hows类没有找到问题,将其提取到Hive表中

替代递归运行Spark-submit作业

实时 Hive 数据转换?

什么是 nvarchar 合适的数据类型,MYSQL 数据库位在 HIVE 中?

大数据测试方法