替换配置单元中的空字符串-NVL和COALESCE已尝试

时间:2018-09-19 11:26:10

标签: hive

如何用其他值替换空字符串(长度为0)?已经使用了NvlCOALESCE,但都不能用替换值替换,因为该值不为null。我可以使用case语句,但要查找内置函数(如果有)。

2 个答案:

答案 0 :(得分:1)

由于您有空字符串,因此,当我们使用 coalesce或nvl 时,仅当数据中包含 null值时,该方法才有效。这些功能不适用于空字符串。

带有空字符串:

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

尝试 alter the table 并添加此属性

TBLPROPERTIES('serialization.null.format'='')

如果此属性未将空字符串显示为null,则我们需要使用case/if语句替换空字符串。

您可以使用if statement

  

if(布尔测试条件,T值True,T值FalseOrNull)

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

答案 1 :(得分:1)

在Hive中,空字符串被视为通常的可比较值,而不是NULL。这就是为什么没有内置功能的原因。

使用案例声明:

SHARED_APPS = (
'tenant_schemas',  # mandatory, should always be before any django app
'frontend', # you must list the app where your tenant model resides in

'django.contrib.contenttypes',

# everything below here is optional
'django.contrib.auth',
'django.contrib.sessions',
'django.contrib.messages',
)

TENANT_APPS = (
'django.contrib.contenttypes',
'django.contrib.auth',
'django.contrib.messages',
'django.contrib.sessions',
'django.contrib.admin',
'rest_framework',
# your tenant-specific apps
'frontend',
'backend',
)


INSTALLED_APPS = [
'tenant_schemas',  # mandatory, should always be before any django app
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'frontend',
'backend',
]

TENANT_MODEL = "frontend.Client" # app.Model