[ 
https://issues.apache.org/jira/browse/HIVE-24761?focusedWorklogId=585701&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-585701
 ]

ASF GitHub Bot logged work on HIVE-24761:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 20/Apr/21 10:46
            Start Date: 20/Apr/21 10:46
    Worklog Time Spent: 10m 
      Work Description: abstractdog commented on a change in pull request #2099:
URL: https://github.com/apache/hive/pull/2099#discussion_r616566788



##########
File path: 
ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
##########
@@ -3005,6 +3003,19 @@ private boolean validatePTFOperator(PTFOperator op, 
VectorizationContext vContex
           }
         }
       }
+      if (vectorPTFDesc.getOrderExprNodeDescs().length > 1) {
+        /*
+         * Currently, we need to rule out here all cases where a range 
boundary scanner can run,
+         * basically: 1. bounded start 2. bounded end which is not current row
+         */
+        if (windowFrameDef.getWindowType() == WindowType.RANGE
+            && (!windowFrameDef.isStartUnbounded() || 
!windowFrameDef.getEnd().isCurrentRow())) {

Review comment:
       good catch, I'm going to fix the condition to enable unbounded end
   FYI, the connection between this part and boundary scanner is the 
unimplemented method:
   {code}
     @Override
     public boolean isDistanceGreater(Object v1, Object v2, int amt) {
       throw new UnsupportedOperationException("Only unbounded ranges 
supported");
     }
   {code}

##########
File path: 
ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
##########
@@ -3005,6 +3003,19 @@ private boolean validatePTFOperator(PTFOperator op, 
VectorizationContext vContex
           }
         }
       }
+      if (vectorPTFDesc.getOrderExprNodeDescs().length > 1) {
+        /*
+         * Currently, we need to rule out here all cases where a range 
boundary scanner can run,
+         * basically: 1. bounded start 2. bounded end which is not current row
+         */
+        if (windowFrameDef.getWindowType() == WindowType.RANGE
+            && (!windowFrameDef.isStartUnbounded() || 
!windowFrameDef.getEnd().isCurrentRow())) {

Review comment:
       good catch! I'm going to fix the condition to enable unbounded end
   FYI, the connection between this part and boundary scanner is the 
unimplemented method:
   ```
     @Override
     public boolean isDistanceGreater(Object v1, Object v2, int amt) {
       throw new UnsupportedOperationException("Only unbounded ranges 
supported");
     }
   ```




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 585701)
    Time Spent: 1h 20m  (was: 1h 10m)

> Vectorization: Support PTF - bounded start windows
> --------------------------------------------------
>
>                 Key: HIVE-24761
>                 URL: https://issues.apache.org/jira/browse/HIVE-24761
>             Project: Hive
>          Issue Type: Sub-task
>            Reporter: László Bodor
>            Assignee: László Bodor
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> {code}
>  notVectorizedReason: PTF operator: *** only UNBOUNDED start frame is 
> supported
> {code}
> Currently, bounded windows are not supported in VectorPTFOperator. If we 
> simply remove the check compile-time:
> https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java#L2911
> {code}
>       if (!windowFrameDef.isStartUnbounded()) {
>         setOperatorIssue(functionName + " only UNBOUNDED start frame is 
> supported");
>         return false;
>       }
> {code}
> We get incorrect results, that's because vectorized codepath completely 
> ignores boundaries, and simply iterates through all the input batches in 
> [VectorPTFGroupBatches|https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFGroupBatches.java#L172]:
> {code}
>     for (VectorPTFEvaluatorBase evaluator : evaluators) {
>       evaluator.evaluateGroupBatch(batch);
>       if (isLastGroupBatch) {
>         evaluator.doLastBatchWork();
>       }
>     }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to