Hive 中的 COALESCE 函数作用
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) 等价于:
CASEWHEN a IS NOT NULL THEN aWHEN b IS NOT NULL THEN bELSE 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 | 
