没有组/聚合的Spark SQL HAVING子句

时间:2019-07-01 12:15:25

标签: apache-spark apache-spark-sql pyspark-sql

我想知道HAVING子句在没有GroupBY或任何聚合函数的情况下如何在Spark sql中工作?

1)我们可以依赖没有聚合功能的HAVING吗? 2)还有其他方法可以过滤在该选择级别上生成的列吗?

我尝试执行下面的Spark SQL是否可以正常工作,但是我们可以依靠它吗?

spark.sql("""
select 1 as a having a=1
""").show()
spark.sql("""
select 1 as a having a=2
""").show()
+---+
|  a|
+---+
|  1|
+---+

+---+
|  a|
+---+
+---+

2 个答案:

答案 0 :(得分:0)

在某些数据库/引擎中,当GROUP BY不与HAVING一起使用时,HAVING默认为WHERE子句。

通常使用WHERE子句。

没有GROUP BY的情况下,我不会依靠HAVING。

答案 1 :(得分:0)

回答这个问题:1) 我们可以依靠没有聚合函数的 HAVING 吗?

不,您不能依赖这种行为。这个非法 SQL 不再是 Spark 2.4 的默认行为。但是如果你真的想像 WHERE 子句一样使用 HAVING,你可以通过设置 conf spark.sql.legacy.parser.havingWithoutGroupByAsWhere = true

来获得旧的行为