我想知道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|
+---+
+---+
答案 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