代码之家  ›  专栏  ›  技术社区  ›  AbtPst

配置单元:失败:在多个表/子查询中找到SemanticException列

  •  0
  • AbtPst  · 技术社区  · 4 年前

    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
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   leftjoin    4 年前

    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' ) " 
    

    或者,如果您的配置单元版本不支持not IN子查询,则可以使用LEFT JOIN+filter进行相同的查询

    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
    "