Hive 1.1.0 tez hadoop oracle NULL sort
最近发现hive 0.14 运行在tez的时候有不少bug,决定升级hive为hive 1.1.0,因为集群hadoop版本是2.3.0,一不小心踩到坑:
1、hive 1.1.0 需要jdk1.7以上
2、设置这个环境变量 HADOOP_USER_CLASSPATH_FIRST="true"
3、https://issues.apache.org/jira/browse/HIVE-9957 打上这个patch,此patch将在hive1.2.0中集成。编译hive 1.1.0源码后把 hive-shims-0.23-1.1.0.jar 替换了。最后记得还要替换hive-exec-1.1.0.jar中的Hadoop23Shims.class
另外提一点对于NULL的排序,hive与oracle有所不同,对于如下SQL:
SELECT
t.chanl_id,
t.date_id,
t.pltfm_id,
t.prov_id,
t.old_mbr_num,
ROW_NUMBER () OVER (partition by t.date_id ORDER BY t.old_mbr_num) ROW_NUMBER
FROM
data t;
Oracle 执行结果如下:
56859 2015-02-15 1 1 449 1
56859 2015-02-15 1 1 6869 2
56859 2015-02-15 1 1 7047 3
56859 2015-02-15 1 1 8628 4
56859 2015-02-15 1 1 11804 5
56859 2015-02-15 1 1 12089 6
56859 2015-02-15 1 1 18778 7
56859 2015-02-15 1 1 25906 8
。。。。
56859 2015-02-15 1 1 191046115 939
56859 2015-02-15 1 1 NULL 940
56859 2015-02-15 1 1 NULL 941
56859 2015-02-15 1 1 NULL 942
56859 2015-02-15 1 1 NULL 943
Hive 执行结果如下:
0 56859 2015-02-15 1 1 NULL 1
1 56859 2015-02-15 1 1 NULL 2
2 56859 2015-02-15 1 1 NULL 3
3 56859 2015-02-15 1 1 NULL 4
4 56859 2015-02-15 1 1 449 5
5 56859 2015-02-15 1 1 6869 6
6 56859 2015-02-15 1 1 7047 7
7 56859 2015-02-15 1 1 8628 8
8 56859 2015-02-15 1 1 11804 9
可见两者对于NULL的排序不一样。