Невозможно загрузить инкрементные данные, используя MERGE в улье
У меня есть 2 таблицы -
- промежуточный стол - Внешний - AVRO хранилище
- финальный стол - управляемый Hive - хранилище ORC (16 блоков)
У меня есть работа, которая выполняет все задачи в следующем порядке:
- Действие Sqoop извлекает данные из Teradata в каталог hdfs. (на этом режиссере сидит постановочный стол.)
- Действие Hive вызывает оператор Merge, который переносит данные в конечную таблицу из промежуточной таблицы.
Когда работа Oozie успешна, я нахожу это -
- В промежуточной таблице указано правильное количество записей, а данные верны.
- Финальная таблица имеет больше записей, чем необходимо.
- Дополнительные строки в итоговой таблице имеют много столбцов, как ноль
- Значения меток времени из промежуточной таблицы не загружаются в итоговую таблицу, и я вижу все пустые значения для этих столбцов. Я помещаю столбцы меток времени из промежуточной таблицы в UDF from_unixtime перед загрузкой в финальную таблицу.
Эти результаты остаются правильными во время начальной загрузки или дополнительной загрузки финальной таблицы.
Ниже приведены два ограничения, с которыми я работаю:
- Я попытался использовать хранилище TEXT для промежуточной таблицы, в этом случае это решает проблему с отметкой времени, но осталась другая проблема.
- Я не могу использовать PARQUET для промежуточной таблицы, потому что sqoop не может правильно импортировать столбцы меток времени из-за открытой проблемы.
Объединение из AVRO в ORC не поддерживается / не рекомендуется с Merge? Функциональность Hive Transaction еще не готова к работе? Пожалуйста, предложите лучший курс действий.
Версии -
HDP - 2.6.1.0-129 HIVE - Улей 1.2.1000.2.6.1.0-129