[ https://issues.apache.org/jira/browse/HIVE-22903?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17040666#comment-17040666 ]
Shubham Chaurasia commented on HIVE-22903: ------------------------------------------ [~rameshkumar] Thanks a lot for the review. {quote} We should probably loop through the groupBatches and skip reseting if it is a row_number and a constant(And probably this might fix https://issues.apache.org/jira/browse/HIVE-22909 too). {quote} Sorry I could not understand this. Currently, it's like {code:java} if (!isPartitionOrderBy && !skipResetEvaluatorsForRowNumber) { groupBatches.resetEvaluators(); } {code} Does looping though groupBatches (evaluators ? ) mean something like {code:java} public void resetEvaluators() { for (VectorPTFEvaluatorBase evaluator : evaluators) { if (!isPartitionOrderBy && !skipResetEvaluatorsForRowNumber) { evaluator.resetEvaluator(); } } } {code} I was confused because these flags isPartitionOrderBy and skipResetEvaluatorsForRowNumber are common to all the evaluators and would not change for a particular evaluator. > Vectorized row_number() resets the row number after one batch in case of > constant expression in partition clause > ---------------------------------------------------------------------------------------------------------------- > > Key: HIVE-22903 > URL: https://issues.apache.org/jira/browse/HIVE-22903 > Project: Hive > Issue Type: Bug > Components: UDF, Vectorization > Affects Versions: 4.0.0 > Reporter: Shubham Chaurasia > Assignee: Shubham Chaurasia > Priority: Major > Labels: pull-request-available > Attachments: HIVE-22903.01.patch, HIVE-22903.patch > > Time Spent: 10m > Remaining Estimate: 0h > > Vectorized row number implementation resets the row number when constant > expression is passed in partition clause. > Repro Query > {code} > select row_number() over(partition by 1) r1, t from over10k_n8; > Or > select row_number() over() r1, t from over10k_n8; > {code} > where table over10k_n8 contains more than 1024 records. > This happens because currently in VectorPTFOperator, we reset evaluators if > only partition clause is there. > {code:java} > // If we are only processing a PARTITION BY, reset our evaluators. > if (!isPartitionOrderBy) { > groupBatches.resetEvaluators(); > } > {code} > To resolve, we should also check if the entire partition clause is a constant > expression, if it is so then we should not do > {{groupBatches.resetEvaluators()}} -- This message was sent by Atlassian Jira (v8.3.4#803005)