[ https://issues.apache.org/jira/browse/HIVE-20432?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16603938#comment-16603938 ]
Ashutosh Chauhan commented on HIVE-20432: ----------------------------------------- 1. Instead of if (leftValue instanceof Integer) {..} else if (leftValue instanceof Long) {...} else {} you may simply do long leftVal = ((Number) leftValue).longValue() concise and simpler to read. 2. In isIntegerType() you also need to add || primitiveCategory == PrimitiveCategory.BYTE in if () for tinyint. +1 pending these changes. > Rewrite BETWEEN to IN for integer types for stats estimation > ------------------------------------------------------------ > > Key: HIVE-20432 > URL: https://issues.apache.org/jira/browse/HIVE-20432 > Project: Hive > Issue Type: Improvement > Affects Versions: 4.0.0 > Reporter: Vineet Garg > Assignee: Vineet Garg > Priority: Major > Attachments: HIVE-20432.1.patch, HIVE-20432.2.patch, > HIVE-20432.3.patch > > > IN clause provides better statistics estimation since predicates are equality > based and it keeps into account selectivity of all values. BETWEEN is > rewritten into {{>= AND <=}} i.e. non-equality predicates which cause worse > estimation. For integer types BETWEEN could be rewritten into IN e.g. BETWEEN > 4 and 7 is equivalent to IN (4,5,6,7). -- This message was sent by Atlassian JIRA (v7.6.3#76005)