在配置单元中执行以下查询时没有错误(直线(。但当使用pyspark从Python执行时,相同的查询失败,并显示以下错误消息。我如何调整python代码以使用本机hive引擎而不是pyspark来执行下面的查询?
select count(com_dq), col1 from ( select col1, case when col2 not in (select distinct col3 from hive_Schema_name_1.table_name_1 where col4=1 AND col5='ABC' ) then 1 else 0 end as com_dq from hive_Schema_name_2.table_name_2 ) as data group by col1;
使用Python中的Pyspark执行上述查询时出现以下错误:AnalysisException:IN/EXISTS谓词子查询只能在Filter/Join和一些命令中使用:
我也尝试过使用hivecontext-sql,但也出现了同样的错误。
hive有时不支持SELECT子句中的子查询。您需要使用带有where子句的左联接重写SQL。您可以使用下面的SQL,它使用左联接来模拟not in子句。
SELECT Count(com_dq),
col1
FROM (SELECT col1,
CASE
WHEN rs.col3 IS NULL THEN 1
ELSE 0
END AS com_dq
FROM hive_schema_name_2.table_name_2
LEFT JOIN (SELECT DISTINCT col3
FROM hive_schema_name_1.table_name_1
WHERE col4 = 1
AND col5 = 'ABC') rs
ON rs.col3 = col2
WHERE rs.col3 IS NULL) rs2
GROUP BY 2