在执行左外连接时,hive中的日期过滤器

时间:2017-04-06 06:41:59

标签: sql hadoop join hive hue

我在hive中进行查询构建,下面给出了查询。

*

Select * from CSS407 
LEFT OUTER JOIN PROD_CORE.SERV_ACCT_ISVC_LINK SASP
ON CSS407.TABLE_ABBRV_CODE = 'SACT'
AND CSS407.EVENT_ITEM_REF_NUM = SASP.Serv_Acct_Id
AND to_date(CSS407.EVENT_RTS_VAL) >= SASP.Acct_Serv_Pnt_Strt_Dt
AND to_date(CSS407.EVENT_RTS_VAL) <  SASP.Acct_Serv_Pnt_End_Dt 
LEFT OUTER JOIN PROD_CORE.CUST_ACCT_SA_LINK ASA
ON CSS407.TABLE_ABBRV_CODE = 'SACT'
AND CSS407.EVENT_ITEM_REF_NUM = ASA.Serv_Acct_Id
AND CSS407.EVENT_RTS_VAL_UTC_DTTM >= ASA.Acct_Relt_Strt_Dttm
AND CSS407.EVENT_RTS_VAL_UTC_DTTM <  ASA.Acct_Relt_End_Dttm
LEFT OUTER JOIN PROD_CORE.CUST_SA_LINK ASAT
ON CSS407.TABLE_ABBRV_CODE = 'TACT'
AND CSS407.EVENT_ITEM_REF_NUM = ASAT.Serv_Acct_Id
AND CSS407.EVENT_RTS_VAL_UTC_DTTM >= ASAT.Acct_Relt_Strt_Dttm
AND CSS407.EVENT_RTS_VAL_UTC_DTTM <  ASAT.Acct_Relt_End_Dttm

*

当我在hive中执行上表时,我收到以下错误

“JOIN'SASP'中遇到左右别名”

在进一步调查中,我发现我们不能在连接条件下使用过滤器之间的日期。在每个帖子中,每个人都要求将该过滤器插入到where条件中。

但是在我们的情况下,如果我们将过滤器之间的日期移动到where条件,那么我们就没有得到任何数据,因为左外连接不满意。

我在HIVE中执行时遇到此问题,它在Teradata和oracle中工作正常

请帮忙。

2 个答案:

答案 0 :(得分:0)

只有等式(=)在Hive.Move &lt; = 中的连接条件中适用于where子句。

我之前有类似的问题。请查看下面的帖子。

Hive Select MAX() in Join Condition

希望这有帮助。

答案 1 :(得分:-1)

CSS407和SERV_ACCT_ISVC_LINK之间可能存在一些可能会产生此错误的常见列。