hive数据类型检查

当下hadoop和其他NoSQL数据库为什么如此流行的一个原因是他们采用的是schema on read策略,而非传统关系型数据库的schema on write。传统的数据库严格要求数据的schema。数据的列数,每列的字段类型在创建开始都严格规定,因此,你需要时刻按照数据的格式来存储。Hive和其他一些非关系型数据库事先对数据的格式和具体内容并不关心,只有当数据被读出的时候才会应用schema。这样带来的好处是你实现可以先存储你的数据,直到当你要分析你数据时再灵活指定需要的schema。

那么当hive中出现数据类型不对时会出现什么状况?

hive数据类型

基本数据类型:tinyint, smallint, int,bigint, boolean, float, double, string

复杂数据类型:struct,map,array

hive对数据类型的检查

数据导入时不进行类型检查,不支持schema on write

数据读取时会进行类型检查,支持schema on read,

如果类型异常,会将字段复制为NULL

hive> select * from hequn_xxx;
OK
521460020740	9787506042946 
521460020939	9787506043946
521460020954	9787517026686
521460021042	4324234324324
521460021271	9787511023681
	NULL
	NULL
521460021908	321432
521460022134	3123412312
521460022166	7544012476

我们又改如何进行处理呢?如果不处理数据流向下游可能造成问题的延伸,这样当问题出现时不利于查找问题的根源。所以读取数据的时候需要对数据进行检查。

1.将null赋为其他值。

case when aid is null then cast('111' as bigint) else aid end

2.遇到null时直接退出。hive的内建函数assert_true()当条件为false时会抛出异常。

assert_true(aid is not null)

3.对于更复杂的格式检查可以通过自定义UDF来检查。

 

posted on 2015-09-12 17:21  hequn8128  阅读(5152)  评论(0编辑  收藏  举报

导航