在Spark SQL中使用Case语句时出现语法错误
问题描述:
我想运行一个运行不同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火花支撑,如何才能做到这一点
答
我在工作,我不知道近十几个SQL和像SQL一样的方言,我从来没有见过这样的语法。看起来似乎有一个关于SQL子句应该做什么的核心误解。
SELECT子句用于描述标量元素的投影。在许多方言中,您可以在本节中发出子查询 - 有时甚至是相关的子查询 - 但您始终必须应用将结果转换为标量值的运算符。例如:
SELECT (CASE WHEN EXISTS (SELECT foo FROM tbl) THEN 1 ELSE 0 END)
这里的“存在”操作不相关子查询转换成标量布尔值,所以它是合法的。
顶级查询中缺少FROM子句也是一个大红旗。它或者类似于Oracle的“双重”模式在我看过的方言中有大约一半是合法的,但是如果你想要做的是在两个查询之间动态切换,那么你几乎肯定是做错了。 juergen是对的 - 你可能打算做的是使用2个不同的查询。
你不能把完整的选择放入一个CASE –
你应该在你的逻辑中处理它并根据输入执行2个不同的查询 –
谢谢。只是有兴趣,如果它可能 –