我想运行一个case语句,它根据Spark SQL中的条件运行不同的SELECT语句,但不能正确地获取语法。
我的SQL语句看起来像这样
registerTable(sql="SELECT CASE WHEN typedKeyword > '' THEN (SELECT * FROM `temp.sdf0` WHERE originalKeyword > ''AND keyword > '' AND deviceType = 'devicetype' ) ELSE (SELECT * FROM `temp.tes` WHERE originalKeyword > ''AND keyword > '' ) END ",alias="temp.test")
我不知道是否在spark SQL中支持CASE语句,所以如何实现这个
答案 0 :(得分:0)
我已经使用了十几种类似SQL和SQL的方言,而且我从未见过这样的语法。看起来似乎存在对SQL子句应该做什么的核心误解。
SELECT子句用于描述标量元素的投影。在许多方言中,您可以在此子句中发出子查询 - 有时甚至是相关的子查询 - 但是您始终必须应用将结果转换为标量值的运算符。例如:
SELECT (CASE WHEN EXISTS (SELECT foo FROM tbl) THEN 1 ELSE 0 END)
这里" EXISTS"运算符将不相关的子查询转换为标量布尔值,因此它是合法的。
顶级查询中缺少FROM子句也是一个很大的危险信号。它或者类似甲骨文"双"这样的类似物在我见过的大约一半方言中是合法的,但如果你想要做的是动态切换两个问题,你几乎肯定做错了。 juergen是对的 - 您可能要做的就是使用2个不同的查询。