[ https://issues.apache.org/jira/browse/IMPALA-7750?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul Rogers updated IMPALA-7750: -------------------------------- Priority: Trivial (was: Major) Description: A trivial optimization is to omit ELSE if it adds no value: {code:sql} CASE WHEN id = 10 THEN id ELSE NULL END {code} The {{ELSE}} case defaults to null if not provided, so the above can be rewritten to: {code:sql} CASE WHEN id = 10 THEN id END {code} Also, the simplification can omit the only {{WHEN}} clause if it returns {{NULL}}. For example, when rewriting {{nullif()}} we get {code:sql} CASE WHEN id IS DISTINCT FROM NULL THEN NULL ELSE NULL END {code} This should be simplified to just {{NULL}}. was: The current FE {{CASE}} rewrite code in {{SimplifyConditionalsRule.simplifyCaseExpr()}} misses some opportunities for optimizations. If these rules are implemented, then the ad-hoc rules for several other functions can be removed. h4. Constant Folding Consider a typical un-optimized conditional function rewrite: {code:sql} CASE WHEN NULL IS NULL THEN 10 ELSE 20 END {code} Should be rewritten to just {{10}} since the expression is always true. (Currently the expression is not rewritten.) The same issue occurs for the inverse: {code:sql} CASE WHEN 10 IS NULL THEN 10 ELSE 20 END {code} Fix these and we can remove the ad-hoc rules for {{NULLIF}} and aliases in {{rewriteNullIfFn()}}. Also {{nvl2()}} in {{rewriteNvl2Fn}} and {{ifnull()}} in {{rewriteIfNullFn()}}. In general, any constant expression should be evaluated: {code:sql} CASE WHEN isTrue(TRUE) THEN 10 ELSE 20 END {code} The constant expression can be evaluated and optimized as for constants. Tests suggest that the {{ConstantFoldingRule}} does not handle these cases. h4. Prune Trivial ELSE Clause A trivial optimization is to omit ELSE if it adds no value: {code:sql} CASE WHEN id = 10 THEN id ELSE NULL END {code} The {{ELSE}} case defaults to null if not provided, so the above can be rewritten to: {code:sql} CASE WHEN id = 10 THEN id END {code} Summary: Prune trivial ELSE clause in CASE simplification (was: Additional FE optimizations for CASE expressions) > Prune trivial ELSE clause in CASE simplification > ------------------------------------------------ > > Key: IMPALA-7750 > URL: https://issues.apache.org/jira/browse/IMPALA-7750 > Project: IMPALA > Issue Type: Improvement > Components: Frontend > Affects Versions: Impala 3.0 > Reporter: Paul Rogers > Priority: Trivial > > A trivial optimization is to omit ELSE if it adds no value: > {code:sql} > CASE WHEN id = 10 THEN id ELSE NULL END > {code} > The {{ELSE}} case defaults to null if not provided, so the above can be > rewritten to: > {code:sql} > CASE WHEN id = 10 THEN id END > {code} > Also, the simplification can omit the only {{WHEN}} clause if it returns > {{NULL}}. For example, when rewriting {{nullif()}} we get > {code:sql} > CASE WHEN id IS DISTINCT FROM NULL THEN NULL ELSE NULL END > {code} > This should be simplified to just {{NULL}}. -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-all-unsubscr...@impala.apache.org For additional commands, e-mail: issues-all-h...@impala.apache.org