Seb*_*cre 7 null hadoop hive replace
我正在尝试显示默认值"其他",当查询不返回所选列之一的任何结果时.我会告诉你这个例子.
此查询返回os(agent) SO
(在第一行中)的空值:
select country, os(agent) SO, count(*) from clicks_data
where country is not null and os(agent) is not null
group by country, os(agent);
Run Code Online (Sandbox Code Playgroud)
输出:
ZA 4
ZA Android 4
ZA Mac 8
ZA Windows 5
Run Code Online (Sandbox Code Playgroud)
相反,我想得到这个结果:
ZA Others 4
ZA Android 4
ZA Mac 8
ZA Windows 5
Run Code Online (Sandbox Code Playgroud)
我的下一次尝试是这个查询,但它并没有真正起作用:
select country, regexp_replace(os(agent),'','Others') SO, count(*) from clicks_data
where country is not null and os(agent) is not null
group by country, os(agent);
Run Code Online (Sandbox Code Playgroud)
这是结果:
ZA Others 4
ZA OthersAOthersnOthersdOthersrOthersoOthersiOthersdOthers 4
ZA OthersMOthersaOtherscOthers 8
ZA OthersWOthersiOthersnOthersdOthersoOtherswOtherssOthers 5
Run Code Online (Sandbox Code Playgroud)
Far*_*que 14
使用LENGTH()
检查列值的长度.它返回> 0,如果有一些值,则返回0表示空或NULL值.
还在CASE WHEN ... END
块中构建列值
最终查询可能如下所示:
SELECT country, CASE WHEN LENGTH(os(agent)) > 0 THEN os(agent) ELSE 'Others' END AS SO, COUNT(*)
FROM clicks_data
WHERE country IS NOT NULL AND os(agent) IS NOT NULL
GROUP BY country, os(agent);
Run Code Online (Sandbox Code Playgroud)
希望这能帮到你!!!
小智 10
COALESCE将是您的最佳选择和最佳解决方案
语法: COALESCE(VALUE,DEFAULT_VALUE):当值为null时,函数返回默认值,否则返回VALUE;
询问
SELECT country, COALESCE(os(agent),'Others') AS SO, COUNT(*)
FROM clicks_data
WHERE country IS NOT NULL AND os(agent) IS NOT NULL
GROUP BY country, os(agent);
Run Code Online (Sandbox Code Playgroud)
希望这将是您的问题的有效解决方案.