[
https://issues.apache.org/jira/browse/HIVE-22903?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17046793#comment-17046793
]
Shubham Chaurasia commented on HIVE-22903:
------------------------------------------
[~rameshkumar]
Thanks for the suggestions. Yes, it was not related to constants. It's related
to batch size.
Resetting evaluator only when isLastGroupBatch=true fixed all the cases. Fixed
https://issues.apache.org/jira/browse/HIVE-22909 as well. I uploaded a new
patch with this approach.
{code:java}
if (!isPartitionOrderBy) {
// To keep the row counting correct, don't reset for row_number evaluator
if it's not a isLastGroupBatch
if (!isLastGroupBatch && isRowNumberFunction()) {
return;
}
groupBatches.resetEvaluators();
}
{code}
However I think this can be safely generalized for all the functions like -
{code:java}
if (!isPartitionOrderBy && isLastGroupBatch) {
groupBatches.resetEvaluators();
}
{code}
Will give this a try tomorrow.
> 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.02.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)