Справочная информация: Наша группа проходит обновление Cloudera до 6.1.1, и мне было поручено определить, как справиться с потерей неявного преобразования типов данных между типами данных. См. Ссылку ниже для получения подробной информации о выпуске.
https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_611_incompatible_changes.html#hive_union_all_returns_incorrect_data
Эта проблема не только влияет на запросы UNION ALL, но и выполняет функцию сравнения столбцов с различными типами данных (т.е. STRING to BIGINT).
Группа решила, что мы не хотим изменять метаданные базовой таблицы. Таким образом, решение состоит в том, чтобы учесть потенциальную потерю данных с помощью функции CAST () для приведения данных. В случае UNION ALL мы приводим метаданные таблицы назначения. Но, выполняя сравнения, я пытаюсь определить самый простой и легкий способ выполнения сравнений без получения ошибочных результатов.
Вопрос:
Могу ли я просто привести все в STRING или VARCHAR () при выполнении сравнения? Есть ли потенциальные проблемы, которые могут привести к неправильным результатам?
Обновление: Если есть проблемы с этим подходом, есть ли правильное решение, чтобы справиться с этим?
Примечание: это мое первое взаимодействие с Hadoop / HIVE иЯ узнал, что все, что я знаю в земле СУРБД, не всегда применимо.