Подтвердить что ты не робот

Ошибка в запросе на улей при соединении таблиц

Я не могу пройти проверку равенства, используя нижеприведенный запрос 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);

EDITED на основе справки FuzzyTree:

первый:

Мы попытались отредактировать выше запрос, используя предложение from и where, но не получив никакого вывода из запроса.

Но Если мы изменили вышеуказанный запрос, удалив предложение inter с датой, я получил некоторый результат на основе "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);

2nd:

Затем мы попытались передать только одну дату:

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);

Итак, теперь он показывает некоторый результат, но если мы передадим фильтр даты начала и окончания, он; не показывая никакого результата.

4b9b3361

Ответ 1

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

Только объединения равенств, внешние объединения и левые полуобъединения поддерживаются в Улей. Улей не поддерживает условия соединения, которые не являются равенством поскольку очень трудно выразить такие условия, как свернуть/уменьшить работу.

Попробуйте переместить неравенства в предложение 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);