详解:Hive中的NULL的处理、优点、使用情况(注意)
Hive中的NULL的处理、优点、使用情况
一:Hive中的NULL
hive的使用中不可避免的需要对null、‘’(空字符串)进行判断识别。但是hive又别于传统的数据库。
1.不同数据类型对空值的存储规则
int与string类型数据存储,null默认存储为 \N;
string类型的数据如果为"",存储则是"";
另外往int类型的字段插入数据“”时,结果还是\N。
2.不同数据类型,空值的查询
对于int可以使用is null来判断空;
而对于string类型,条件is null 查出来的是\N的数据;而条件 =’’,查询出来的是""的数据
所以:
判断空时要根据实际的存储来进行判断。在开发过程中如果需要对空进行判断,一定得知道存储的是哪种数据。
二:Hive中的NULL的处理
建表时直接指定(两种方式)
1.用语句
ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe’
with serdeproperties(‘serialization.null.format’ = ‘’)实现,
注意两者必须一起使用,
create table adm.adm_crystal_plan_batch_order_7d_delta_daily(order_item_unit_price string,order_qty bigint,payment_amt bigint)partitioned by (dt string)row format delimited fields terminated by '31'stored as textfiletblproperties ( 'serialization.null.format' = '');
2.通过ROW FORMAT DELIMITED NULL DEFINED AS ‘’
如
CREATE TABLE hive_tb (id int,name STRING)PARTITIONED BY ( `day` string,`type` tinyint COMMENT '0 as bid, 1 as win, 2 as ck', `hour` tinyint)ROW FORMAT DELIMITED NULL DEFINED AS '' STORED AS TEXTFILE;
补充:修改已存在的表
alter table hive_tb set serdeproperties('serialization.null.format' = '');
这句话的意思是让null和’‘等价,也就是让null不显示,因为null对开发来说不好操作,可能不同地方代表意义不同,而且转码可能也会有问题,所有用’'代替。
三:Hive中的NULL的处理优点
HIVE表中默认将NULL存为\N,可查看表的源文件(hadoop fs -cat或者hadoop fs -text),文件中存储大量\N,
这样造成浪费大量空间。
可以看出存储NULL的\N 浪费了大量空间
使用以上的语句进行创建的时候,可以相互对比一下 数据量的大小空间
在hdfs上面对应的文件查询就可以看到结果
hadoop fs -du
可以进行 节省空间结果的验证
四:Hive中的NULL的使用情况(注意)
但是不是所有的情况都需要进行是hive的null处理的
1.hive中insert语句必须列数匹配,不支持不写入,没有值的列必须使用null占位。
2.hive表的数据文件中按分隔符区分各个列。空列会保存NULL(\n)来保留列位置。但外部表加载某些数据时如果列不够,如表13列,文件数据只有2列,则在表查询时表中的末尾剩余列无数据对应,自动显示为NULL。
详解:Hive中的NULL的处理、优点、使用情况(注意)相关推荐
- linux下详解shell中/dev/null 21
前言 相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句.以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>& ...
- java lock unlock_详解Java中的ReentrantLock锁
ReentrantLock锁 ReentrantLock是Java中常用的锁,属于乐观锁类型,多线程并发情况下.能保证共享数据安全性,线程间有序性 ReentrantLock通过原子操作和阻塞实现锁原 ...
- java mysbatis select_java相关:详解Mybatis中的select方法
java相关:详解Mybatis中的select方法 发布于 2020-7-3| 复制链接 摘记: selectById方法根据id,查询记录 ```java public void updateRe ...
- mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数
<Mysql实例详解Mysql中的JSON系列操作函数>要点: 本文介绍了Mysql实例详解Mysql中的JSON系列操作函数,希望对您有用.如果有疑问,可以联系我们. MYSQL必读前言 ...
- java object数组转实体类_详解Java中String JSONObject JSONArray List实体类转换
JSON使用阿里的fastJson为依赖包 gradle依赖管理如下: compile group: "com.alibaba", name: "fastjson&quo ...
- python xlrd安装_详解python中xlrd包的安装与处理Excel表格
一.安装xlrd 地址 下载后,使用 pip install .whl安装即好. 查看帮助: >>> import xlrd >>> help(xlrd) Help ...
- java中priorityqueue_详解JAVA中priorityqueue的具体使用
Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...
- java 拦截指定jsp_详解Struts2中对未登录jsp页面实现拦截功能
struts2中拦截器大家都很经常使用,但是拦截器只能拦截action不能拦截jsp页面.这个时候就有点尴尬了,按道理来说没登录的用户只能看login界面不能够通过输入url进行界面跳转,这显然是不合 ...
- 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程
本篇文章主要介绍了详解spring中使用Elasticsearch的代码实现,具有一定的参考价值,有兴趣的可以了解一下 在使用Elasticsearch之前,先给大家聊一点干货. 1. ES和solr ...
最新文章
- Android 系统开发_四大组件篇 -- Service 解析(用法)
- 根据文件路径检测文件大小并检测是否正在被占用
- logback常用配置
- ATOM editor recommended by Sean
- 计算机网络基础 第4章 龚娟,计算机网络基础 人民邮电 龚娟 第4章习题答案
- 121. 买卖股票的最佳时机 golang
- vue v-if判断数组元素的值_我对Vue项目上线做的一些基本优化
- 保存画面为图片 当前MFC保存该程序为图片 c++ vc
- sql server cross/outer apply 用法
- MAPGIS67默认打开方式失败
- 常见For 循环优化方式总结——提高效率小妙招
- 解决 zsh:command not found
- 圆柱壳matlab,[matlab遗传算法工具箱论文]基于遗传算法和BP神经网络的圆柱壳大...
- 如何查看win10电脑系统盘是哪个盘?
- 2020年12月编程语言排行榜
- python制作折线图_python 生成折线图
- 推荐几款网盘资源搜索站点,必须收藏 !
- html5 邮箱后缀自动填写,Ant Design Vue AutoComplete 通过自定义选项search实现如自动补充邮箱后缀功能...
- VSCode 与 WebStorm 横向对比
- Android中实现简单的仿京东详情页面
热门文章
- LindDotNetCore~入门基础
- 201612-1-中间数
- Python中easy_install 和 pip 的安装及使用
- 企业级数仓构建项目一-大数据Week12-DAY1-企业级数仓构建项目一
- disable-user-add-description
- 【编译原理笔记07】语法分析:SLR、LR(1)、LALR、二义性分析与错误处理
- mysql4.52_phpMyAdmin 4.5.0.2 发布下载,MySQL 管理工具
- 【Win 10应用开发】Adaptive磁贴模板的XML文档结构
- mfc 学习的第三天
- 编译或者运行找不到库解决