hive中空值问题以及类型转换

上一篇 / 下一篇  2011-10-30 19:46:31 / 个人分类:hadoop/hive

空值的问题以前也讨论过,但还有很多种情况没有考虑,前几天被凝兰MM问住了,于是又去验证了一番,总结如下:

关于hive里字段为空的问题,首先说明,NULLNULL,空是空,字段设置成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出来仍然是\Nlength()也不为0。没有数据的字段(如最后五个字段没有造数据)仍是空,length()不为0SQL Server的术语中,NULL是一个未知值,或者是一个还没有提供数据的值。

另外,关于字符转码,intchar或者charint如果失败就会出现0或者null的情况(待继续验证)(验证结果:load数据intstring毫无压力,stringint变成null,使用cast转化时,数字转string毫无压力,stringintstring中如果全是数字能转成int,如果有字母就变成0)(hive中没有charvarchar,我只见过stringint/bigint)。对于字符串比较大小,如果字符串全是数字,则按数字大小比较,如果有字母,比较大小就没意义了。


TAG: hive null cast

 

评分:0

我来说两句

日历

« 2024-04-17  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 36428
  • 日志数: 15
  • 建立时间: 2011-09-30
  • 更新时间: 2012-03-27

RSS订阅

Open Toolbar