如何用其他值替换空字符串(长度0)?已使用 Nvl 以及 COALESCE 但两者都不替换为替换值,因为该值不为null。我可以用 case 语句,但正在查找内置函数(如果有)。
Nvl
COALESCE
case
3lxsmp7m1#
因为您有空字符串,所以当我们使用coalesce或nvl时,只有在数据中有空值时才起作用。这些函数不能处理空字符串。使用空字符串:
hive> select coalesce(string(""),"1"); +------+--+ | _c0 | +------+--+ | | +------+--+ hive> select nvl(string(""),"1"); +------+--+ | _c0 | +------+--+ | | +------+--+
具有空值:
hive> select coalesce(string(null),"1"); +------+--+ | _c0 | +------+--+ | 1 | +------+--+ hive> select nvl(string(null),"1"); +------+--+ | _c0 | +------+--+ | 1 | +------+--+
尝试更改表并添加此属性
TBLPROPERTIES('serialization.null.format'='')
如果这个属性没有将空字符串显示为null,那么我们需要使用 case/if 语句来替换空字符串。你可以用 if statement if(布尔testcondition,t valuetrue,t valuefalse或null)
case/if
if statement
hive> select if(length(trim(<col_name>))=0,'<replacement_val>',<col_name>) from <db>.<tb>;
例子:
hive> select if(length(trim(string("")))=0,'1',string("col_name")); +------+--+ | _c0 | +------+--+ | 1 | +------+--+ hive> select if(length(trim(string("1")))=0,'1',string("col_name")); +-----------+--+ | _c0 | +-----------+--+ | col_name | +-----------+--+
xpcnnkqh2#
在配置单元中,空字符串被视为通常的可比较值,而不是null。这就是为什么没有内置函数的原因。使用case语句:
case when col='' or col is null then 'something' else col end
2条答案
按热度按时间3lxsmp7m1#
因为您有空字符串,所以当我们使用coalesce或nvl时,只有在数据中有空值时才起作用。这些函数不能处理空字符串。
使用空字符串:
具有空值:
尝试更改表并添加此属性
如果这个属性没有将空字符串显示为null,那么我们需要使用
case/if
语句来替换空字符串。你可以用
if statement
if(布尔testcondition,t valuetrue,t valuefalse或null)例子:
xpcnnkqh2#
在配置单元中,空字符串被视为通常的可比较值,而不是null。这就是为什么没有内置函数的原因。
使用case语句: