Hive 配置单元-Where and OR子句错误

Hive 配置单元-Where and OR子句错误,hive,where-clause,in-subquery,Hive,Where Clause,In Subquery,您好,我试图在配置单元中运行此查询,但出现错误10249(不支持的查询表达式-仅支持1个子查询…) 任何人都知道我如何编写此代码,以便Hive支持此查询(在SQL server中运行良好)在CTE中隐藏您的子查询,在where子句中使用left join和use或condition 即 由于您不需要表C中的字段,因此可以使用左半联接而不是中的: select count(*) from ( select * from tableA union all select * from

您好,我试图在配置单元中运行此查询,但出现错误10249(不支持的查询表达式-仅支持1个子查询…)


任何人都知道我如何编写此代码,以便Hive支持此查询(在SQL server中运行良好)

在CTE中隐藏您的子查询,在where子句中使用left join和use或condition


由于您不需要表C中的字段,因此可以使用
左半联接
而不是
中的

select count(*) from
(
   select * from tableA
   union all
   select * from tableB
) a
  left semi join tableC c1 on a.field1=c1.fieldA 
  left semi join tableC c2 on a.field2=c2.fieldA 
  left semi join tableC c3 on a.field3=c3.fieldA 
;
左半联接
是半联接,结果集仅包含一个联接表中的字段,仅返回联接行,类似于内部联接,但如果右表包含多个匹配行,则不会创建重复项。
左半联接以一种有效的方式实现了不相关的IN/EXISTS子查询语义

如果只支持一个子查询,那么您将需要分离查询(这里有3个查询,用OR分隔)并合并它们的结果。
   with temp as 
   (
   select * from tableA
   union all
   select * from tableB
   )

select COUNT(a.*)
       from temp a left join tableC a1 on  a.field1 =a1.fieldA
       left join tableC a2 on  a.field2 =a2.fieldA
       left join tableC a3 on  a.field3 =a3.fieldA
     where   a1.fieldA is not null 
          or a3.fieldA is not null
          or a3.fieldA is not null
select count(*) from
(
   select * from tableA
   union all
   select * from tableB
) a
  left semi join tableC c1 on a.field1=c1.fieldA 
  left semi join tableC c2 on a.field2=c2.fieldA 
  left semi join tableC c3 on a.field3=c3.fieldA 
;