快捷搜索:  汽车  科技

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表中 查看表中的数据

hive入门教程3:0458-Hive数据类型校验问题分析(1)

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;

hive入门教程3:0458-Hive数据类型校验问题分析(2)

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;

(可左右滑动)

hive入门教程3:0458-Hive数据类型校验问题分析(3)

查看检索出来类型异常的数据

hive入门教程3:0458-Hive数据类型校验问题分析(4)

3.查看写入到HDFS的类型转换异常的数据

hive入门教程3:0458-Hive数据类型校验问题分析(5)

猜您喜欢: