Hive 2.1无法正确评估NULL映射

时间:2016-11-26 00:26:22

标签: hadoop null hive emr tez

我试图在Hive 2.1中找到检查NULL映射的解决方法。当我检查地图内的键时,我得到了正确的结果。这是我试图评估的结果以及结果:

hive> select request_params, request_params is null, request_params['id'], request_params['id'] is null  from dcs_log_pday_s3 where pday='2016-11-24' and hour='00' and pid=1124 limit 10;
OK
{"id":"EAED7055-7003-4A11-8494-CF1079EF24","et%3Aivs%7Cdata%3Ad":"1966"}    false   EAED7055-7003-4A11-8494-CF1079EF24  false
NULL    false   NULL    true
NULL    false   NULL    true
NULL    false   NULL    true
NULL    false   NULL    true
NULL    false   NULL    true
NULL    false   NULL    true
NULL    false   NULL    true
NULL    false   NULL    true
{"id":"97EBD924-C45C-4A93-AAEF-57595005","et%3Aibs%7Cdata%3Ad":"1966"}  false   97EBD924-C45C-4A93-AAEF-57595005    false
Time taken: 0.095 seconds, Fetched: 10 row(s)

但是,在旧版本的Hive上我没有同样的问题(例如在Hive 1.1上):

hive> select request_params, request_params is null  from dcs_log_pday_s3 where 
pday='2016-11-24' and hour='00' and pid=1124 limit 10;
Query ID = keystone_20161126000606_0a8caadd-ec27-4a92-96a9-5e7b0b95f318
...
Total MapReduce CPU Time Spent: 1 minutes 2 seconds 750 msec
OK
{"id":"3AFCDA87-BAE5-4EEA-9B47-61BA2B4D0BC8","et%3Aibs%7Cdata%3Ad":"1966"}  false
NULL    true
NULL    true
NULL    true
NULL    true
NULL    true
NULL    true
NULL    true
{"id":"8D0F1D5F-57E7-4127-94C0-C1FD4F98D6E8","et%3Aibs%7Cdata%3Ad":"1966"}  false

我可以补充一点,我在AWS EMR 5.2上运行的第一个查询以及第二个查询在本地CDH5.4群集上运行。

有人可以给我一些见解吗?

1 个答案:

答案 0 :(得分:1)

我通过使用size UDF找到了解决方法。似乎在评估NULL时它返回-1。 (https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSize.java#L74

这是一个查询运行:

hive> select size(null) from emr_output limit1;
OK
-1