温馨提示:本文翻译自stackoverflow.com,查看原文请点击:mongodb - Column value become NULL when creating Hive table from BSON file
bigdata bson hadoop hive mongodb

mongodb - 从BSON文件创建Hive表时,列值变为NULL

发布于 2020-04-14 09:41:40

我从MongoDB(4.0)的BSON文件转储中创建了一个Hive(3.1.2)表。创建表后,我从表中选择了几个条目。但是其中一些值是null。

我尝试使用python从BSON打印表行。它打印正确的值。表示不丢失值。关于如何进一步排除故障的任何线索?

SQL创建配置单元表。

CREATE EXTERNAL TABLE `tmp_test_status`(
  `id` string COMMENT 'frame_id', 
  `createdAt` INT, 
  `updatedAt` string, 
  `task` string)
row format serde 'com.mongodb.hadoop.hive.BSONSerDe'
with serdeproperties('mongo.columns.mapping'='{"id":"_id"}')
stored as inputformat         'com.mongodb.hadoop.mapred.BSONFileInputFormat'
outputformat 'com.mongodb.hadoop.hive.output.HiveBSONFileOutputFormat'
LOCATION
  'oss://data-warehouse/hive/warehouse/data.db/tmp_test_status';

==========================================

我通过python bson lib打印的数据。

{'_id': '00003a02-280d-4e59-8483-a0143e0a3359', 'createdAt': '1557999191951', 'updatedAt': '1557999191951', 'task': 'lane', '__v': 0}

==========================================

我从Hive表中选择的数据:

00003a02-280d-4e59-8483-a0143e0a3359    NULL    NULL    lane
093e72ae-206b-4112-ac28-5ba38f9485d0    NULL    NULL    lane
093ebe41-183c-47b4-ab25-93336875ae10    NULL    NULL    lane
093ec16b-ba1d-4ddc-90bc-9981342e8071    NULL    NULL    lane

查看更多

提问者
Martin Peng
被浏览
338
Martin Peng 2019-06-11 02:39

我自己找到了答案,原因是BSON文件属性名称区分大小写,但Hive不能区分。如果属性名称在BSON文件中包含大写字母,则Hive在查询时将返回NULL。仅通过对我有用的表属性映射属性名称。

with serdeproperties('mongo.columns.mapping'='{"id":"_id", "createdAt": "createdAt", "updatedAt": "updatedAt", "reLabeled1" : "reLabeled1", "isValid": "isValid"}')