Hive 中的 COALESCE 函数作用
COALESCE 是 Hive 中一个非常常用的空值处理函数,用于从多个列或表达式中返回第一个非空值(non-NULL value)。
1. 基本语法
COALESCE(value1, value2, ..., valueN)
- 从左到右依次判断每个值是否为
NULL。 - 返回第一个非
NULL的值。 - 如果所有值都是
NULL,则返回NULL。
2. 常见用途
2.1 处理空值,提供默认值
SELECT COALESCE(name, 'Unknown') AS name FROM users;
- 如果
name为NULL,返回'Unknown'。 - 否则返回
name。
2.2 多列中取第一个非空值
SELECT COALESCE(email, phone, 'No Contact') AS contact FROM users;
- 如果
email非空,返回email。 - 否则如果
phone非空,返回phone。 - 否则返回
'No Contact'。
2.3 合并多个列的值
SELECT COALESCE(address1, address2, 'No Address') AS address FROM users;
- 优先使用
address1,如果为空则用address2,最后用默认值。
2.4 在 INSERT 或 UPDATE 中使用
INSERT INTO users (name) VALUES (COALESCE(:input_name, 'Default Name'));
- 如果输入参数
input_name为NULL,插入'Default Name'。
3. 与 IFNULL 的区别
IFNULL(expr1, expr2):只处理两个值,如果expr1为NULL,返回expr2。COALESCE:可以处理多个值,更灵活。
示例:
-- IFNULL(仅两个值)
SELECT IFNULL(name, 'Unknown') FROM users;
-- COALESCE(多个值)
SELECT COALESCE(name, nickname, 'Unknown') FROM users;
4. 与 CASE WHEN 的等价关系
COALESCE(a, b, c) 等价于:
CASE
WHEN a IS NOT NULL THEN a
WHEN b IS NOT NULL THEN b
ELSE c
END
但 COALESCE 更简洁。
5. 注意事项
COALESCE是 SQL 标准函数,Hive、Spark SQL、MySQL、PostgreSQL 等都支持。- 所有参数类型应尽量一致,否则可能隐式转换。
- 性能优于
CASE WHEN,推荐优先使用。
6. 示例数据
| name | nickname | phone |
|---|---|---|
| Alice | NULL | 123456 |
| NULL | Bob | NULL |
| NULL | NULL | NULL |
查询:
SELECT COALESCE(name, nickname, 'Unknown') AS display_name FROM users;
结果:
| display_name |
|---|
| Alice |
| Bob |
| Unknown |
1523

被折叠的 条评论
为什么被折叠?



