【发布时间】:2020-07-11 03:21:27
【问题描述】:
我有一个 Spark SQL 查询,例如:
Select * from xTable a Where Exist (filter subquery) AND (a.date IN (Select max(b.date) from xTable b))
在某些情况下(当没有提供过滤表时),我的filter subquery 应该简单地做一个Select 1。
每当我在 Impala 中运行它时,它都会返回记录,在 Hive 中它抱怨只允许 1 个子查询表达式。但是,当我在 Spark 2.4 中将它作为 Spark SQL 运行时,它返回一个空数据帧。知道为什么吗?我做错了什么?
【问题讨论】:
-
你能澄清一下我的
filter subquery应该简单地做一个选择1。是吗? -
是的,如果没有提供过滤表,它只需要做一个“选择1”,但是如果提供了一个过滤表,那么从过滤表中选择*。
-
由于查询本身看起来不错,这意味着没有足够的信息来找出问题所在。能否添加
explain()输出,并检查执行器日志是否有任何异常)? -
另外,我会将
a.date IN (Select max(b.date) from xTable b)更改为a.date = (Select max(b.date) from xTable b),因为它的join vs. filter。
标签: apache-spark apache-spark-sql