join—在配置单元中连接多个表时,表别名无效

sd2nnvve  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(427)

有人能确定为什么不接受这个多表联接吗?当我引入第三个表时,它就会失败,表别名无效。我看不出有什么问题:
这项工作(两张table):

select  
 a.ri as `R_ID`
,oc3.name as `RET`
,a.rch as `RC`
from dev.sl a join dev.codes oc3 
    on (a.pk_business = oc3.pk_business 
    and a.pk_data_source = oc3.pk_data_source 
    and a.pk_frequency = oc3.pk_frequency 
    and oc3.pk_data_state = '123'
    and oc3.code = a.ri and oc3.codeset = 'xyz')

然后添加第三个表,结果失败:(三个表):

select  
 a.ri as `R_ID`
,oc3.name as `RET`
,a.rch as `RC`
from dev.sl a join dev.codes oc3 
    on (a.pk_business = oc3.pk_business 
    and a.pk_data_source = oc3.pk_data_source 
    and a.pk_frequency = oc3.pk_frequency 
    and oc3.pk_data_state = '123'
    and oc3.code = a.ri and oc3.codeset = 'xyz') join dev.items b 
on (b.pk_business = a.pk_business 
and b.pk_data_source = a.pk_data_source 
and b.pk_frequency = a.pk_frequency 
and b.pk_data_state = '123' 
and a.ii = b.item_id 
and a.cc = b.country_code)

semanticexception[错误10009]:行1:2920无效的表别名“a”:

qeeaahzv

qeeaahzv1#

再更新一次-可能不是由于事务表。通过额外的测试,我现在也看到非事务表也会发生这种情况。当我直接从服务器上的putty会话执行三表连接时,它似乎可以工作,但是当我使用sqldeveloper时,它会产生前面提到的错误。这似乎是sqldeveloper的一个问题,但原因仍不得而知。

9udxz4iz

9udxz4iz2#

我有一个更新-这似乎是由于有一个表被创建为可更新的表(tblproperty('transactional'='true')),还有一个没有,并且我的会话设置为:

SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
SET hive.support.concurrency=true;
SET hive.enforce.bucketing=true;
SET hive.exec.dynamic.partition.mode=nonstrict;

这导致了问题。在另一个没有设置的会话上,并将其重新指向作为非acid类型表创建的相同表“a”,多表联接工作正常。我对配置单元的了解还不够,不知道为什么—我怀疑事务表和非事务表不能在同一个“transaction”(select语句)中联接。

相关问题