Ошибка в 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);
Другие вопросы по тегам