次のようにクエリを実行しようとしています
hive -e "set hive.execution.engine=mr;set hive.strict.checks.cartesian.product=false;
set hive.mapred.mode=nonstrict;use db1; select col1,col2 from tb1 where col_date='2020-08-15' and col3='Y'
and col4='val4' and col1 not in
( select distinct col1 from db2.tb2 where col_date='2020-08-15' and
col5='val5' and col6='val6' and col3='Y' and col4='val4') "
でも、私はずっと得続けています
FAILED: SemanticException Column col1 Found in more than One Tables/Subqueries
私は何を間違っているのでしょうか?どうすればこれを修正できますか?
db1.tb1 の列
col1
col2
col_date
col3
col4
db2.tb2 の列
col1
col2
col_date
col3
col4
col5
col6
------------------------
テーブルにエイリアスを追加し、それをすべての列に使用します。
hive -e "set hive.execution.engine=mr;set hive.strict.checks.cartesian.product=false;
set hive.mapred.mode=nonstrict;
use db1;
select t1.col1, t1.col2
from tb1 t1
where t1.col_date='2020-08-15' and t1.col3='Y' and t1.col4='val4'
and t1.col1 not in
( select distinct t2.col1 from db2.tb2 t2
where t2.col_date='2020-08-15' and t2.col5='val5' and t2.col6='val6' and t2.col3='Y' and t2.col4='val4' ) "
または、Hive バージョンが NOT IN サブクエリをサポートしていない場合は、LEFT JOIN + フィルタを同じものに使用できます。
hive -e "set hive.execution.engine=mr;set hive.strict.checks.cartesian.product=false;
set hive.mapred.mode=nonstrict;
use db1;
select t1.col1, t1.col2
from tb1 t1
left join
( select distinct t2.col1 from db2.tb2 t2
where t2.col_date='2020-08-15'
and t2.col5='val5'
and t2.col6='val6'
and t2.col3='Y'
and t2.col4='val4'
) s on t1.col1 = s.col1
where t1.col_date='2020-08-15' and t1.col3='Y' and t1.col4='val4'
and s.col1 is null --filter out joined records
"