hive入门教程3:0458-Hive数据类型校验问题分析
hive入门教程3:0458-Hive数据类型校验问题分析2.CM和CDH版本为5.15.01.RedHat7.21文章编写目的使用Hive时大家都会遇到数据类型校验的问题,相比传统关系型数据库会严格要求数据的Schema,数据的列数、每一列的字段类型都有严格的规定,因此数据的存储必须按照定义的Schema格式来存储。而Hive数据库对数据格式及具体的内容并不关心,只有在数据被读出时才会与定义的Schema进行转换。那这个时候就会出现数据类型转换的问题,本篇文章Fayson主要分析下如何查找表中类型转换错误的数据以及Hive对空值和NULL的处理。
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1
文章编写目的
使用Hive时大家都会遇到数据类型校验的问题,相比传统关系型数据库会严格要求数据的Schema,数据的列数、每一列的字段类型都有严格的规定,因此数据的存储必须按照定义的Schema格式来存储。而Hive数据库对数据格式及具体的内容并不关心,只有在数据被读出时才会与定义的Schema进行转换。那这个时候就会出现数据类型转换的问题,本篇文章Fayson主要分析下如何查找表中类型转换错误的数据以及Hive对空值和NULL的处理。
- 测试环境
1.RedHat7.2
2.CM和CDH版本为5.15.0
2
测试数据准备
1. 建表语句如下:
create table test_null (id int age string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
(可左右滑动)
2. 测试数据如下:
[root@cdh2 ~]# vim test1.dat 1 23 2 24c 3 32d 4 30 5 NULL
(可左右滑动)
3. 将测试数据加载到test_cast表中 查看表中的数据
Fayson在前面定义的表结构为id和age两个字段均为int类型,在Load的示例数据中age列有非数值类型的数据,查看表数据时会看到如上截图类型转换失败显示为NULL。
3
查找异常类型数据
Hive本身没有机制来校验数据的有效性,如果我们想检索出表中类型转换异常的数据,则可以通过nvl和cast两个函数来结合判断数据是否转换失败了。如下为实现方式:
1. 创建一个测试表及准备测试数据,SQL如下:
select id nvl(cast(age as int) "error") age from test_cast;
2.将类型异常的数据插入到新的表中,SQL如下:
create table test_exception as select * from (select id nvl(cast(age as int) 'error') age from test_cast) as b where b.age='error';
(可左右滑动)
同样也可以只是用cast来进行查找,SQL如下:
create table test_exception as select * from (select id nvl(cast(age as int) age) age from test_cast) as b where b.age is null;
(可左右滑动)
查看检索出来类型异常的数据
3.查看写入到HDFS的类型转换异常的数据