我们生产使用的hive3.1.2版本,hadoop也是3版本,用户通过使用hive发现join数据错误。分析SQL发现,当3表(含3表)以上,hive join出来的数据是错误。后来我通过测试发现,不管是left join、inner join还是right join,数据都会出现错误,通过后来的其他测试发现,两个表使用in和exists作为条件查询,出来的数据也是错误的。这是hive3的一个重大bug,使用hive3的小心了。
这个bug纠缠了我好久,后来定位出来hive的bug,我们生产环境已经修复了该bug。分析发现hive从2.6.1版本就开始有这个bug
in 和exists案例sql:
select count(mdn) from oth_cdr_cleanout_d where month_id='202111' and pr_id='953' and mdn in (select accs_nbr from test_2922_01_13) ;
select count(*) from (select mdn from oth_cdr_cleanout_d d where month_id='202111' and exists (select accs_nbr from test_2922_01_13 where accs_nbr=d.mdn) group by mdn) t;
在某些情况下,两表join也可能数据错误