[ https://issues.apache.org/jira/browse/HIVE-12945?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15120275#comment-15120275 ]
Gopal V commented on HIVE-12945: -------------------------------- It is setting the bit in the bitset twice. {code} int n = ObjectInspectorUtils.getBucketNumber(convCols, new ObjectInspector[]{constOI}, ctxt.getNumBuckets()); bs.set(n); + if (ctxt.isCompat()) { + int h = ObjectInspectorUtils.getBucketHashCode(convCols, new ObjectInspector[]{constOI}); + // -ve hashcodes had conversion to positive done in different ways in the past + // abs() is now obsolete and all inserts now use & Integer.MAX_VALUE + // the compat mode assumes that old data could've been loaded using the other conversion + n = ObjectInspectorUtils.getBucketNumber(Math.abs(h), ctxt.getNumBuckets()); + bs.set(n); + } {code} Once with the known good path and once with the Math.abs() path. For a +ve hash-code that will be a no-op. For a -ve hash-code like -15, it will be (15 % 16) vs (2147483633 % 16) resulting in [1,15] for the bitset, as it shows up in the test-case. > Bucket pruning: bucketing for -ve hashcodes have historical issues > ------------------------------------------------------------------ > > Key: HIVE-12945 > URL: https://issues.apache.org/jira/browse/HIVE-12945 > Project: Hive > Issue Type: Bug > Components: Tez > Affects Versions: 2.0.0 > Reporter: Gopal V > Assignee: Gopal V > Priority: Critical > Attachments: HIVE-12945.1.patch > > > The different ETL pathways differed in reducer choice slightly for -ve > hashcodes. > {code} > (hashCode & Integer.MAX_VALUE) % numberOfBuckets; > != > Math.abs(hashCode) % numberOfBuckets > {code} > Add a backwards compat option, which can be used to protect against old data > left over from 0.13. -- This message was sent by Atlassian JIRA (v6.3.4#6332)