如何用其他值替换空字符串(长度为0)?已经使用了Nvl
和COALESCE
,但都不能用替换值替换,因为该值不为null。我可以使用case
语句,但要查找内置函数(如果有)。
答案 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