将HIV或查询结果中的特定值替换为空值或NULL值

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)

希望这将是您的问题的有效解决方案.