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) 编辑 收藏 举报