替换配置单元中的空字符串-nvl并合并

busg9geu  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(536)

如何用其他值替换空字符串(长度0)?已使用 Nvl 以及 COALESCE 但两者都不替换为替换值,因为该值不为null。我可以用 case 语句,但正在查找内置函数(如果有)。

3lxsmp7m

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)

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  |
    +-----------+--+
xpcnnkqh

xpcnnkqh2#

在配置单元中,空字符串被视为通常的可比较值,而不是null。这就是为什么没有内置函数的原因。
使用case语句:

case when col='' or col is null then 'something' else col end

相关问题