概述
Hive里null值和空字符串是两个不同的东西。
NULL值【N】,较为常见,就是所谓的空值,字段没有值。
空字符串【' '】,通常多为人为指定。
数据类型对于空值的存储规则:
- int与string类型,null默认存储为N,
- int类型插入“”时,结果还是N
- string类型的数据如果为“ ”,存储则是“ ”
空值的查询规则:
- int类型,用is null来判断空值;
- string类型,用is null 判断 N的数据,用 = ' ' 判断" "的数据
空值是如何产生的:
- hive中insert语句必须列数匹配,不支持不写入,没有值的列必须用null补全占位。
- hive表的数据文件中按分隔符区分各个列,空列会保存NULL【N】来保留原有列位置。如表中有15个字段,文件数据中只有12列数据,则其余末尾数据自动显示为NULL【N】
- A left join B 如果A中有B中没有,关联结果以空NULL显示
- 对字符串类型的数据进行处理时,如字符串替换regexp_replace,字符串截取substr等,结果可能会出现空字符串 ' '
所以,NULL转化为空字符串,可以节省磁盘空间
1)创建新表
ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe’ with serdeproperties('serialization.null.format' = '')
2) 修改已存在的表
alter table hive_tb set serdeproperties('serialization.null.format' = '');
NULL值处理:
1) 函数NVL
格式:NVL(expr1,expr2)
如果第一个参数为null(空值)那么显示第二个参数的值,
如果第一个参数的值不为null(空值),则显示第一个参数本来的值。
2)Coalesce函数
格式:Coalesce(expr1, expr2, expr3….. exprn)
作用和NVL函数相似,其优势是有更多的选项。
表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。返回表达式中第一个非空表达式。
使用案例:
nvl(click_pv, 0) as click_pv
nvl(user_id, '') as user_id
nvl(play_time, 0.0) as play_time
最后
以上就是端庄棒棒糖为你收集整理的Hive空字符串‘‘与NULL值对比的全部内容,希望文章能够帮你解决Hive空字符串‘‘与NULL值对比所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复