2016-09-28 123 views
0

我想运行一个运行不同SELECT语句的case语句基于Spark SQL中的条件但无法获得语法权限。在Spark SQL中使用Case语句时出现语法错误

我的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") 

如果CASE语句在SQL火花支撑,如何才能做到这一点

+1

你不能把完整的选择放入一个CASE –

+2

你应该在你的逻辑中处理它并根据输入执行2个不同的查询 –

+0

谢谢。只是有兴趣,如果它可能 –

回答

0

我在工作,我不知道近十几个SQL和像SQL一样的方言,我从来没有见过这样的语法。看起来似乎有一个关于SQL子句应该做什么的核心误解。

SELECT子句用于描述标量元素的投影。在许多方言中,您可以在本节中发出子查询 - 有时甚至是相关的子查询 - 但您始终必须应用将结果转换为标量值的运算符。例如:

SELECT (CASE WHEN EXISTS (SELECT foo FROM tbl) THEN 1 ELSE 0 END) 

这里的“存在”操作不相关子查询转换成标量布尔值,所以它是合法的。

顶级查询中缺少FROM子句也是一个大红旗。它或者类似于Oracle的“双重”模式在我看过的方言中有大约一半是合法的,但是如果你想要做的是在两个查询之间动态切换,那么你几乎肯定是做错了。 juergen是对的 - 你可能打算做的是使用2个不同的查询。