我是靠谱客的博主 端庄棒棒糖,最近开发中收集的这篇文章主要介绍Hive空字符串‘‘与NULL值对比,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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值对比所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部