wangyum commented on pull request #30222:
URL: https://github.com/apache/spark/pull/30222#issuecomment-721474620
Hive optimized it to `predicate: CASE WHEN ((a = 100)) THEN (false) WHEN ((b
> 1000)) THEN (true) WHEN (c is not null) THEN (false) ELSE (null) END (type:
boolean)`. But this condition can not push down. We can optimized it to `b >
1000` and push down it.
```
hive> explain SELECT *
> FROM (SELECT CASE
> WHEN a = 100 THEN 1
> WHEN b > 1000 THEN 2
> WHEN c IS NOT NULL THEN 3
> END AS x
> FROM t) tmp
> WHERE x = 2;
OK
STAGE DEPENDENCIES:
Stage-0 is a root stage
STAGE PLANS:
Stage: Stage-0
Fetch Operator
limit: -1
Processor Tree:
TableScan
alias: t
Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column
stats: NONE
Filter Operator
predicate: CASE WHEN ((a = 100)) THEN (false) WHEN ((b > 1000))
THEN (true) WHEN (c is not null) THEN (false) ELSE (null) END (type: boolean)
Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column
stats: NONE
Select Operator
expressions: CASE WHEN ((a = 100)) THEN (1) WHEN ((b > 1000))
THEN (2) WHEN (c is not null) THEN (3) ELSE (null) END (type: int)
outputColumnNames: _col0
Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL
Column stats: NONE
ListSink
```
----------------------------------------------------------------
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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]