Это расширение вопроса, который я задал вчера: Как справиться с потенциальной потерей данных при выполнении сравнений по типам данных в разных группах
В HIVE возможно ли проводить сравнениямежду двумя столбцами, которые находятся в разных группах типов данных, встроенных в предложение SELECT
? Мне нужно сначала определить, какие входящие метаданные для каждого столбца, а затем предоставить логику, которая выбирает, что CAST
использовать.
CASE
WHEN Column1 <=> Column2 THEN 0 -- Error occurs here if data types are in different data type groups (i.e., BIGINT <=> STRING)
ELSE 1
END
Если это невозможно, есть ли обходной путь для получения метаданныхданные и выполнять CAST'ing на основе определенных правил? Например, если:
- Столбец1 равен BIGINT
- Столбец2 равен STRING
Затем CAST Column2 как BIGINT, а затем выполните сравнение. Самое простое возможное решение желательно. Я надеюсь, что мне не придется вносить существенные изменения в базовую систему, которая генерирует оператор SELECT
.
Обновление 2: Существует внутренняя система, которая генерируетЗапросы SQOOP, и в этой системе есть функция, которая изменяет предложение SELECT для сравнения двух столбцов. Проблема, с которой мы сталкиваемся, заключается в том, что столбцы раньше неявно конвертировались в более ранней версии HIVE / Cloudera, которую мы использовали. Теперь, когда мы выполняем обновление до версии, которая не поддерживает неявное преобразование типов данных, нам нужно найти простейшее решение для продолжения поддержки преобразования типов данных. К сожалению, в бэк-энде нет доступных метаданных, поэтому я пытаюсь взломать их в предложении SELECT