Hive поддерживает условные операторы - https://cwiki.apache.org/Hive/languagemanual-udf.html#LanguageManualUDF-ConditionalFunctionsБлок заявления в случае, иначе
Однако, я хотел бы использовать блок условных операторов. Например, у меня есть две таблицы A и B, имеющие похожие столбцы (хотя имена столбцов не идентичны). Я хочу создать новую таблицу из A и B, чтобы B имел более высокий приоритет. Таким образом, если строка присутствует в В, Я хотел бы выбрать его из B, то выбрать строку из A. т.е.
SELECT
IF (B.id<>NULL,
(B.id as id,
B.value1 as value),
(A.id as id,
a.value2 as value))
FROM A FULL OUTER JOIN B ON (A.id = B.id)
Этот запрос не работает. Это потому, что Hive не поддерживает условные выражения блока? Как я могу реализовать вышеуказанные функции?
Да, это правильно. Я тоже придумал это. Проблема в том, что около 10 столбцов. Мне было интересно, есть ли элегантный способ написать это, а не использовать 10 case-заявлений. Благодаря! – elexhobby
Вы также можете посмотреть тип структуры Hive(), чтобы вы могли просто использовать один оператор case: select case, когда b.id равно null, тогда struct (a.id, a.value) else struct (b.id, b.value) end как id_val ... хотя тогда вы также захотите ответить на мой вопрос здесь: http://stackoverflow.com/questions/16737914/is-there-a-tidier-syntax-for-convert-a-hive -struct-спина к регулярным-столбцам – patricksurry