#mysql #hive #hiveql #inequality
#mysql #куст #hiveql #неравенство
Вопрос:
Я пытаюсь реализовать запрос в улье, который был написан на mysql. Я знаю, что hive не поддерживает объединение неравенств при условии ON. Ниже приведен мой код и подскажите способ его реализации.
Select test1.a,
test2.b,
test4.c,
dummy.c
from
test1 join test2 on test1.id = test2.id and test2 != 'ABC'
join test3 on test1.id = test2.id and test3 != 'Archive'
join test4 on test3.id = test4.id and test4 = 'XYZ'
left outer join
(select test1.a,
test2,b
test3.c
from test1 join test2 on test1.id = test2.id and test2 != 'ABC'
join test3 on test1.id = test2.id) dummy
on test3.id = dummy.id
**and (test4.id != 1001 or dummy.c = TRUE)**
left join test5 on test3.id= test5.id
and dummy.c = TRUE
Теперь условие, выделенное знаком *, — это та часть, где мне нужно знать, как реализовать его в улье, потому что я не могу реализовать его при условии ON, и если я помещаю его в where, результаты предложения не совпадают.
Любые предложения по переписыванию его в hive были бы оценены.
Комментарии:
1. Вы должны создать временную таблицу для фиктивного внутреннего запроса, и неравенство должно быть в предложении where этого запроса, а затем выполнить объединение с этой временной таблицей вместо фиктивной.
2. @AbhinavSingh Я хочу реализовать это без создания временной таблицы.
3. Я пытаюсь понять требования вашего запроса и данных. Вы не извлекаете ни одного столбца из фиктивной таблицы, но все еще выполняете с ним левое соединение. Итак, просто хотите уточнить, ищете ли вы объединение ВСЕХ или левое объединение в своем запросе?
4. @AbhinavSingh На самом деле я выбираю 2-3 столбца из фиктивной таблицы. Я только что добавил столбец once в инструкции select.
5. @AbhinavSingh Спасибо, что изучили это. Я решил это. Я использовал условие неравенства в окончательном операторе select для записей, поступающих из left join, и это сработало.
Ответ №1:
Я использовал условие неравенства в качестве оператора case в моем операторе SELECT для столбцов, которые выбираются из ЛЕВОГО СОЕДИНЕНИЯ. Ниже приведен код —
Select test1.a,
test2.b,
test4.c,
case when (test4.id != 1001 or nvl(dummy.c , False))= TRUE then dummy.c end as c0
from
test1 join test2 on test1.id = test2.id and test2 != 'ABC'
join test3 on test1.id = test2.id and test3 != 'Archive'
join test4 on test3.id = test4.id and test4 = 'XYZ'
left outer join
(select test1.a,
test2,b
test3.c
from test1 join test2 on test1.id = test2.id and test2 != 'ABC'
join test3 on test1.id = test2.id) dummy
on test3.id = dummy.id
left join test5 on test3.id= test5.id
and dummy.c = TRUE