快捷搜索:  汽车  科技

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

hive入门教程3:0458-Hive数据类型校验问题分析3.通过指定查询条件可以检索出空值和NULL类型字符串数据如上图所5、6两条数据均显示的为NULL,通过数据我们无法真实的区别那条数据的age真正的为空。1.创建一个测试表及准备测试数据,SQL如下:create table test_null (id int age string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n' STORED AS TEXTFILE; 测试数据如下:[root@cdh2 ~]# vim test1.dat 1 23 2 24c 3 32d 4 30 5 NULL 6 \N 2.将数据Load到test_null表中显示如下:

通过如上方式我们可以检索出test_cast表中age列类型转换异常的数据,通过每条数据的ID查找对应的原始数据找到问题原因。在上述过程中还出现了另一个问题Hive中NULL和空值是如何处理的?如下Fayson再介绍下Hive中对着两个值的处理。

4

Hive中NULL和空值处理

通过上述的处理过程,我们可以看到Hive对于类型转换异常的数据查询出来显示为NULL,但我们将这些数据写入到新的表后数据文件中显示的为\N。那在我们的数据中如果存’NULL’类型的字符串呢?Hive中默认将NULL存为\N,NULL类型的字符串如何检索?

1.创建一个测试表及准备测试数据,SQL如下:

create table test_null (id int age string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

测试数据如下:

[root@cdh2 ~]# vim test1.dat 1 23 2 24c 3 32d 4 30 5 NULL 6 \N

2.将数据Load到test_null表中显示如下:

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

如上图所5、6两条数据均显示的为NULL,通过数据我们无法真实的区别那条数据的age真正的为空。

3.通过指定查询条件可以检索出空值和NULL类型字符串数据

使用is null可以检索出存储为\N的数据(即id为6的这条数据)

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

使用=’NULL’可以检索出为NULL字符串的数据(即id为5的这条数据)

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

4.在Hive中是通过serialization.null.format参数来保存和标识NULL,通过将表的该参数修改为NULL表示为空值

alter table test_null set serdeproperties ('serialization.null.format' = 'NULL');

(可左右滑动)

向表中插入一条age为NULL的数据

insert into test_null values(7 NULL);

查看此时表中的数据显示

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

查看HDFS插入的数据显示NULL

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

猜您喜欢: