Impala 常用选择与判断函数

Impala 是一种开源的SQL查询引擎,它支持使用SQL语言来查询存储在 Hadoop 的 HDFS 和 HBase 中的 PB 级大数据。本文列举笔者在日常开发工作中,常用的 Impala 选择与判断相关函数。

1.CASE WHEN

case when 有两种形式可以表达:
1.1 第一种表达方式

CASE a 
  WHEN b THEN c
 [WHEN d THEN e ] 
 ...
 [ELSE        f ]
END
/*[] 代表可选*/

1.2 第二种表达方式

CASE
  WHEN a THEN b
 [WHEN c THEN d ]
 ...
 [ELSE        e ]
END
/*[] 代表可选*/

2. IF

IF(boolean表达式,条件为真时的返回值,条件为假时的返回值);

eg:

SELECT IF(10 > 20, 'true', 'false');

上述语句表示,如果10 大于 20,则返回 ‘true’,否则返回 ‘false’。

3. DECODE

DECODE 函数相较于IF函数更加灵活,可以用于比较一个字段的值和多个可能的值。笔者常用 DECODE 函数来实现条件判断或自定义排序功能。

3.1 条件判断

假设我们有一个名为prod_info的表,其中包含prod_id和prod_name两个字段,我们想根据prod_id的值来决定如何格式化prod_name的显示。

用 DECODE 函数表达为:

SELECT
prod_id,
DECODE(prod_id, 1, 'Product A', 2, 'Product B', 'Product C') AS prod_name
FROM prod_info
;

可能对于第一次接触 DECODE 函数的伙伴有些看不懂,这里同步 CASE WHEN 函数的写法,看看是否更能表达清晰些:

SELECT
prod_id  AS prod_id,
CASE prod_id
    WHEN 1 THEN 'Product A'
    WHEN 2 THEN 'Product B'
    ELSE        'Product C'
END      AS prod_name
FROM prod_info
;

3.2 自定义排序

在日常开发中有不少需要自定义排序的需求场景,如业务字段中值包含有‘存款’,‘贷款’,‘中收’,该表需要按‘存款’,‘贷款’,‘中收’顺序依次展示对应其他字段信息。一个实现思路就是在查询语句中排序函数( ORDER BY )后使用 DECODE 函数。

...
ORDER BY DECODE(business_name, '存款', 1, '贷款', 2, '中收', 3) 
;

ASC:升序,默认值。
DESC:降序。
如此,想要展示优先顺序如何只需将对应内容按数字大小编排即可。

4. NVL

NVL函数常用于处理数据中的空值,可以用于条件判断、默认值设定等场景。

lmpala中的 NVL 函数是用来处理空值的函数,它接受两个参数,如果第一个参数为非空值,则返回该参数的值;如果第一个参数为 NULL,则返回第二个参数的值。

NVL(exp1, exp2)

exp1: 要进行判断的表达式,如果为 NULL 则返回 exp2 的值.
假设我们有一个表 emp_info,其中包含一列 salary 表示员工的薪水,有些员工的薪水值为空,现在要实现如果员工薪水值为空,则用 0 替代。

SELECT
emp_id,
emp_name,
NVL(salary, 0) AS salary
FROM emp_info
;

5. COALESCE

COALESCE函数与NVL函数类似,也是常用于处理数据中的空值,可以用于条件判断、默认值设定等场景,不过 COALESCE 函数更灵活,该函数用来匹配多个字段的值。如果表达式1的值为 NULL,那么显示表达式2的值,如果表达式2的值也为空,那么显示表达式3的值,以此类推。

COALESCE(列名,表达式1,表达式2,...,表达式n)
SELECT
t1.emp_id,
COALESCE( t1.emp_name, t2.emp_name, '' ) AS emp_name
FROM      emp_info  t1
LEFT JOIN post_info t2
ON ( t2.emp_id = t1.emp_id )
;

上述语句中 COALESCE函数 所在行表示先取 t1(emp_info) 表中的 emp_name 字段值,若该值为 NULL 则取 t2 (post_info)表中的 emp_name 字段值,否则给默认值 空字符串(‘’).

– END ------------------------

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值