This is an automated email from the ASF dual-hosted git repository. liyang pushed a commit to branch kylin5 in repository https://gitbox.apache.org/repos/asf/kylin.git
commit d7d80985987a344c0a49909cd8d8584829015082 Author: Pengfei Zhan <dethr...@gmail.com> AuthorDate: Wed Aug 9 19:33:45 2023 +0800 KYLIN-5785 Support implicit query of split function 1. support split('aaa-bbb-ccc', '-')[0] implicit query 2. support simplify not(true/false) to false/true --- pom.xml | 2 +- .../org/apache/kylin/query/engine/QueryRoutingEngine.java | 12 ------------ .../main/java/org/apache/kylin/query/udf/SparkStringUDF.java | 6 ++++-- .../org/apache/kylin/query/runtime/ExpressionConverter.scala | 2 ++ 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 2138ca85f8..71763ea249 100644 --- a/pom.xml +++ b/pom.xml @@ -135,7 +135,7 @@ <scala-retry>0.3.0</scala-retry> <!-- Calcite Version --> - <calcite.version>1.116.0-kylin-4.x-r034</calcite.version> + <calcite.version>1.116.0-kylin-4.x-r035</calcite.version> <avatica.version>4.x_1.10-r01</avatica.version> <!-- Hadoop Common deps, keep compatible with hadoop2.version --> diff --git a/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java b/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java index 081edc0d0a..0e3f86b399 100644 --- a/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java +++ b/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java @@ -40,7 +40,6 @@ import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.QueryContext; import org.apache.kylin.common.QueryTrace; import org.apache.kylin.common.debug.BackdoorToggles; -import org.apache.kylin.common.exception.CalciteNotSupportException; import org.apache.kylin.common.exception.KylinException; import org.apache.kylin.common.exception.NewQueryRefuseException; import org.apache.kylin.common.exception.TargetSegmentNotFoundException; @@ -141,8 +140,6 @@ public class QueryRoutingEngine { return handleTransactionException(queryParams, e); } catch (SQLException e) { return handleSqlException(queryParams, e); - } catch (AssertionError e) { - return handleAssertionError(queryParams, e); } finally { QueryResultMasks.remove(); } @@ -183,15 +180,6 @@ public class QueryRoutingEngine { throw e; } - private QueryResult handleAssertionError(QueryParams queryParams, AssertionError e) throws SQLException { - // for example: split('abc', 'b') will jump into this AssertionError - if (e.getMessage().equals("OTHER")) { - SQLException ex = new SQLException(e.getMessage(), new CalciteNotSupportException()); - return pushDownQuery(ex, queryParams); - } - throw e; - } - public boolean checkIfRetryQuery(Throwable cause) { if (TargetSegmentNotFoundException.causedBySegmentNotFound(cause) && QueryContext.current().getMetrics().getRetryTimes() == 0) { diff --git a/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java b/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java index 5ce28e9851..867ffbefe1 100644 --- a/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java +++ b/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java @@ -18,6 +18,8 @@ package org.apache.kylin.query.udf; +import java.util.List; + import org.apache.calcite.linq4j.function.Parameter; import org.apache.calcite.sql.type.NotConstant; import org.apache.kylin.common.exception.CalciteNotSupportException; @@ -90,12 +92,12 @@ public class SparkStringUDF implements NotConstant { throw new CalciteNotSupportException(); } - public String[] SPLIT(@Parameter(name = "str") Object str, @Parameter(name = "regex") Object regex) + public List<String> SPLIT(@Parameter(name = "str") Object str, @Parameter(name = "regex") Object regex) throws CalciteNotSupportException { throw new CalciteNotSupportException(); } - public String[] SPLIT(@Parameter(name = "str") Object str, @Parameter(name = "regex") Object regex, + public List<String> SPLIT(@Parameter(name = "str") Object str, @Parameter(name = "regex") Object regex, @Parameter(name = "limit") Object limit) throws CalciteNotSupportException { throw new CalciteNotSupportException(); } diff --git a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala index d08a37d450..04afba3c94 100644 --- a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala +++ b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala @@ -428,6 +428,8 @@ object ExpressionConverter { new Column(expressions.Chr(k_lit(children.head).expr)) case "space" => new Column(StringRepeat(k_lit(" ").expr, k_lit(children.head).expr)) + case "item" => + element_at(k_lit(children.head), k_lit(children.apply(1).asInstanceOf[Int] + 1)) case _ => throw new UnsupportedOperationException( s"Unsupported function $funcName")