连接表时Hive查询出错

Abh*_*bhi 11 hadoop hive join hiveql cloudera-cdh

我无法使用下面的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);
Run Code Online (Sandbox Code Playgroud)

基于FuzzyTree的帮助编辑:

第一名:

我们尝试使用between和where子句编辑上面的查询,但是没有从查询中获取任何输出.

但是如果我们通过删除带有date的between子句来改变上面的查询,那么我得到了一些基于"v3.adv_price <= t3.comp_price"的输出,但没有使用"date filter".

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);
Run Code Online (Sandbox Code Playgroud)

第二名:

接下来我们尝试只传递一个日期:

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);
Run Code Online (Sandbox Code Playgroud)

所以,现在它显示了一些结果但是如果我们同时传递了开始和结束日期过滤器,它; 没有显示任何结果.

Fuz*_*ree 30

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

Hive仅支持等连接,外连接和左半连接.Hive不支持不是平等条件的连接条件,因为很难表达诸如map/reduce作业之类的条件.

尝试将不等式移到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);
Run Code Online (Sandbox Code Playgroud)