【发布时间】:2017-09-01 00:53:08
【问题描述】:
我正在 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 中运行良好
请帮忙。
【问题讨论】:
-
请分享真正的 SELECT 子句(可能不是
Select *),因为除了使用多个 LEFT JOIN 之外,可能还有其他解决方法 -
附言。我假设您从每个连接的表中获得一条记录?
-
您的联接表是否有主键?
-
我在 HIVE 中执行它时遇到了这个问题,如果我们在 Teradata 中执行相同的查询它正在工作
-
这是 Hive 限制。如果您能回答我的问题,我可能会为您提供解决方法。