Ошибка в Hive Query при соединении таблиц
Я не могу пройти проверку на равенство, используя приведенный ниже запрос HIVE.
У меня есть 3 стола, и я хочу присоединиться к этим столам. Я пытаюсь, как показано ниже, но получаю ошибку:
FAILED: Ошибка в семантическом анализе: Строка 3:40. Левый и правый псевдонимы встречаются в JOIN 'visit_date'
select t1.*, t99.* from table1 t1 JOIN
(select v3.*, t3.* from table2 v3 JOIN table3 t3 ON
( v3.AS_upc= t3.upc_no AND v3.start_dt <= t3.visit_date AND v3.end_dt >= t3.visit_date AND v3.adv_price <= t3.comp_price ) ) t99 ON
(t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no);
РЕДАКТИРОВАНИЕ на основе помощи от FuzzyTree:
первая:
Мы попытались отредактировать вышеуказанный запрос, используя предложение между и где, но не получая никакого результата из запроса.
Но если мы изменили приведенный выше запрос, удалив предложение Между с датой, то я получил вывод, основанный на "v3.adv_price <= t3.comp_price", но без использования "фильтра даты".
select t1.*, t99.* from table1 t1 JOIN
(select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no)
where v3.adv_price <= t3.comp_price
) t99 ON
(t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no);
2-й:
Далее мы попытались передать только одну дату как:
select t1.*, t99.* from table1 t1 JOIN
(select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no)
where v3.adv_price <= t3.comp_price and v3.start_dt <= t3.visit_date
) t99 ON
(t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no);
Итак, теперь он показывает какой-то результат, но если мы пропустим фильтр даты начала и окончания, это; не показывает никакого результата.
1 ответ
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins
В Hive поддерживаются только соединения равенства, внешние соединения и левые полусоединения. Hive не поддерживает условия объединения, которые не являются условиями равенства, так как очень трудно выразить такие условия как отображение / сокращение задания.
Попробуйте перенести свое неравенство в where
пункт
select t1.*, t99.* from table1 t1 JOIN
(select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no)
where t3.visit_date between v3.start_dt and v3.end_dt
and v3.adv_price <= t3.comp_price
) t99 ON
(t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no);