欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Impala 常用选择与判断函数

Impala 常用选择与判断函数

2024/10/24 10:20:16 来源:https://blog.csdn.net/m0_47163275/article/details/141527984  浏览:    关键词: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 第二种表达方式

CASEWHEN 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_idWHEN 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 ------------------------

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com