[ 
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)

Reply via email to