hive中空值问题以及类型转换
上一篇 /
下一篇 2011-10-30 19:46:31
/ 个人分类:hadoop/hive
空值的问题以前也讨论过,但还有很多种情况没有考虑,前几天被凝兰MM问住了,于是又去验证了一番,总结如下:
关于hive里字段为空的问题,首先说明,NULL是NULL,空是空,字段设置成null了不一定就是空,hive里强制置空的符号是'\N',空是没有显示的,但字符长度length(\N)并不等于0。如果没有任何输入,比如直接两个ctrl+v+A,这时候length会等于0.
开发代码里经常有这样一条语句ALTER TABLE tmp_libingxue_getcity_output set
serdeproperties('serialization.null.format' = '');这句话的意思是让null和''等价,也就是让null不显示,因为null对开发来说不好操作,可能不同地方代表意义不同,而且转码可能也会有问题,所有用''代替。经验证,在没有set
serdeproperties('serialization.null.format' = '');的时候输入数据中\N代表空,如果没有这个字段也是空(比如有5个字段,只有前三个字段的值,那么第四个字段和第五个字段为空)。只有当字段没有数据,如两个\t,此时length()为0。
而经过set
serdeproperties('serialization.null.format' = '');后输入数据为空(两个连续的分隔符)显示为NULL(此时length()不为0),\N传入select出来仍然是\N,length()也不为0。没有数据的字段(如最后五个字段没有造数据)仍是空,length()不为0在SQL
Server的术语中,NULL是一个未知值,或者是一个还没有提供数据的值。
另外,关于字符转码,int转char或者char转int如果失败就会出现0或者null的情况(待继续验证)(验证结果:load数据int转string毫无压力,string转int变成null,使用cast转化时,数字转string毫无压力,string转int时string中如果全是数字能转成int,如果有字母就变成0)(hive中没有char和varchar,我只见过string和int/bigint)。对于字符串比较大小,如果字符串全是数字,则按数字大小比较,如果有字母,比较大小就没意义了。
收藏
举报
TAG:
hive
null
cast