Spark SQL 中的 case 语句
Posted
技术标签:
【中文标题】Spark SQL 中的 case 语句【英文标题】:case statement in Spark SQL 【发布时间】:2017-09-13 08:15:11 【问题描述】:我正在为我的公司制定工作流程。因此,我需要使用 Spark SQL 案例语句来过滤某些内容。
我有一个名为 OPP_amount_euro 的列(用于某事的金额保存在那里),我有一个名为 OPP_amount_euro_binned 的列(默认值为 1)。 所以我想编程某种间隔。 如果 OPP_amount_euro 中的值
我已经尝试过找到解决方案,但这不是最好的。
select
case when OPP_amount_eur < 30000 then 1
when OPP_amount_eur >= 30000 then 2
when OPP_amount_eur >= 50000 then 3
when OPP_amount_eur >= 100000 then 4
when OPP_amount_eur >= 300000 then 5
when OPP_amount_eur >= 500000 then 6
when OPP_amount_eur >= 1000000 then 7
end as OPP_amount_eur_binned
from inputTable
所以这段代码运行良好,但我无法在表格中选择任何其他列。如果我在选择后写一个“*”,我会收到以下错误消息:
处理中的异常:ParseException:不匹配的输入 'when' 期望 、','、'FROM'、'WHERE'、'GROUP'、'ORDER'、'HAVING'、'LIMIT'、'LATERAL'、' WINDOW', 'UNION', 'EXCEPT', 'INTERSECT', 'SORT', 'CLUSTER', 'DISTRIBUTE'(第 2 行,第 5 行)== SQL == 选择 * 当 OPP_amount_eur = 30000 然后 2 当 OPP_amount_eur >= 50000 然后 3 当 OPP_amount_eur >= 100000 然后 4 当 OPP_amount_eur >= 300000 然后 5 当 OPP_amount_eur >= 500000 然后 6 当 OPP_amount_eur >= 1000000 然后 7 结束OPP_amount_eur_binned 来自 temptable3083b308bcec4124b6a4650f2bb40695
为什么我不能这样做? 我在互联网上搜索它并且在普通 SQL 中它似乎可以工作,为什么这在 Spark SQL 中是不可能的? 有什么解决办法吗?
我很抱歉我的描述不好,但我在这里绝对是新人,而且我从未接触过 Spark SQL。 我正在实习。
【问题讨论】:
试试SELECT inputTable.*, CASE ...
。 (ANSI SQL 方式。)
顺便说一句,这是case
表达式,而不是声明。
非常感谢您的回复。我按照您的建议更改了代码,但我还有另一个问题。将添加新列 OPP_amount_eur_binned,但仅填充“1”和“2”。例如,我的 OPP_amount_eur 列中的值为 132917.94,对应的计费列的值为 2...通常它应该得到值“4”,因为它大于 100000,你知道这是为什么不工作?
好的,我发现了问题,我必须使用 between 运算符,现在它可以工作了:)
【参考方案1】:
你应该使用别名:
SELECT CASE....,
t.*
FROM YourTable t
【讨论】:
【参考方案2】:这是我的问题的解决方案
Select inputTable.*,
case
when OPP_amount_eur between 0 and 30000 then 1
when OPP_amount_eur between 30000 and 50000 then 2
when OPP_amount_eur between 50000 and 100000 then 3
when OPP_amount_eur between 100000 and 300000 then 4
when OPP_amount_eur between 300000 and 500000 then 5
when OPP_amount_eur between 500000 and 1000000 then 6
else '7'
end as OPP_amount_eur_binned
from inputTable
【讨论】:
以上是关于Spark SQL 中的 case 语句的主要内容,如果未能解决你的问题,请参考以下文章
sql2005中的case when语句怎么用啊?请写出一个常见的例子