Значение столбца становится равным NULL при создании таблицы Hive из файла BSON - PullRequest
0 голосов
/ 29 мая 2019

Я создал таблицу Hive (3.1.2) из ​​дампа файла BSON из MongoDB (4.0). После создания таблицы я выбираю пары записей из таблицы.Однако для некоторых из них значение равно нулю.

Я попытался напечатать строку таблицы из BSON, используя python.Он напечатал значения правильно.Означает, что значение не отсутствует.Любая подсказка о том, как дальнейшее устранение неполадок?

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

1 Ответ

0 голосов
/ 10 июня 2019

Я нашел ответ сам, причина в том, что имя атрибута файла BSON различается строчными и прописными буквами, а Hive - нет. Если имя атрибута содержит верхний регистр в файле BSON, тогда Hive вернет NULL при запросе. Просто сопоставьте имя атрибута с табличными свойствами, сработавшими для меня.

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