Spark CASE WHEN 写法案例

一、前言

用过大数据的同事都熟悉hive和Spark,两者的语法是一样的,但是Spark的速度要比Hive快得多。今天才写一个Spark的大数据报表的时候,遇到一个group by结合Case When的语法问题,现将问题的详细经过记录下来,希望可以对有遇到这个问题伙伴一些帮助。

二、问题

运行报错详细如下截图:

 

 很明显是case when的语句中错误导致,反复检查了几遍,如去掉多余的空格,增加空格,去掉括号,增加括号等。原SQL如下:

drop table temp_fin.cux_trx_vpk_order;
create table temp_fin.cux_trx_vpk_order as
select 
l.org_id,l.period_name,(CASE WHEN l.line_type = 'SKU' THEN l.item_type ELSE l.description END),l.tax_code ,l.currency_code,
sum(l.line_amount ) line_amount,sum(l.acctd_line_amount ) acctd_line_amount,sum(l.net_amount ) net_amount,sum(l.tax_amount ) tax_amount
from temp_fin.cux_trx_line2 l
where l.is_deleted =0
group by l.org_id,l.period_name,(CASE WHEN l.line_type = 'SKU' THEN l.item_type ELSE l.description END),l.tax_code ,l.currency_code;

不细心的话很难发现问题,其根本原因是select 的时候,虽然case when 的语法是对的,case when 的用法逻辑是:如果符合某个条件,则用前者,否则用后者。但是最终需要一个查询结果的别称来承接这个字段结果值。

三、解决

正如报错截图中的提示,please use alias to rename it,意思是请使用字段别称来重新命名,这个是出现在Case When后面的使用语法,所以很简单,用as + 别称 即可解决问题:

原写法:CASE WHEN l.line_type = 'SKU' THEN l.item_type ELSE l.description END

改正:CASE WHEN l.line_type = 'SKU' THEN l.item_type ELSE l.description END as line_type

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序大视界

原创不易,请给点支持和鼓励吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值