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 deb209f5319bc6d2dc0fe727d65202e3b834f55c Author: Zhimin Wu <596361...@qq.com> AuthorDate: Wed Aug 30 18:36:05 2023 +0800 KYLIN-5799 Fix round, bround, lpad, rpad function --- .../org/apache/kylin/query/udf/SparkMathUDF.java | 7 +++++- .../org/apache/kylin/query/udf/SparkStringUDF.java | 15 +++++++++++-- .../kylin/query/runtime/ExpressionConverter.scala | 25 ++++------------------ .../kylin/query/runtime/SparderRexVisitor.scala | 1 - 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/query/src/main/java/org/apache/kylin/query/udf/SparkMathUDF.java b/src/query/src/main/java/org/apache/kylin/query/udf/SparkMathUDF.java index ae20f7d1a3..38db80697d 100644 --- a/src/query/src/main/java/org/apache/kylin/query/udf/SparkMathUDF.java +++ b/src/query/src/main/java/org/apache/kylin/query/udf/SparkMathUDF.java @@ -24,7 +24,12 @@ import org.apache.kylin.common.exception.CalciteNotSupportException; public class SparkMathUDF implements NotConstant { - public Object BROUND(@Parameter(name = "str1") Double exp1, @Parameter(name = "str2") Integer exp2) + public Object BROUND(@Parameter(name = "str1") Object exp1, @Parameter(name = "str2") Object exp2) + throws CalciteNotSupportException { + throw new CalciteNotSupportException(); + } + + public Object BROUND(@Parameter(name = "str1") Object exp1) throws CalciteNotSupportException { throw new CalciteNotSupportException(); } 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 867ffbefe1..93c36e6af3 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 @@ -64,21 +64,32 @@ public class SparkStringUDF implements NotConstant { throw new CalciteNotSupportException(); } - public String LPAD(@Parameter(name = "str1") String exp1, @Parameter(name = "num2") Integer exp2, + public String LPAD(@Parameter(name = "str1") String exp1, @Parameter(name = "num2") Object exp2, @Parameter(name = "str3") String exp3) throws CalciteNotSupportException { throw new CalciteNotSupportException(); } + public String LPAD(@Parameter(name = "str1") String exp1, @Parameter(name = "num2") Object exp2) + throws CalciteNotSupportException { + throw new CalciteNotSupportException(); + } + public String REPLACE(@Parameter(name = "str1") String exp1, @Parameter(name = "str2") String exp2, @Parameter(name = "str3") String exp3) throws CalciteNotSupportException { throw new CalciteNotSupportException(); } - public String RPAD(@Parameter(name = "str1") String exp1, @Parameter(name = "num2") Integer exp2, + public String RPAD(@Parameter(name = "str1") String exp1, @Parameter(name = "num2") Object exp2, @Parameter(name = "str3") String exp3) throws CalciteNotSupportException { throw new CalciteNotSupportException(); } + public String RPAD(@Parameter(name = "str1") String exp1, @Parameter(name = "num2") Object exp2) + throws CalciteNotSupportException { + throw new CalciteNotSupportException(); + } + + public String RTRIM(@Parameter(name = "str1") String exp1) 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 04afba3c94..53dc5b25a5 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 @@ -45,19 +45,20 @@ object ExpressionConverter { "explode" ) - private val ternaryParameterFunc = mutable.HashSet("replace", "substring_index", "lpad", "rpad", "conv", "regexp_extract") + private val ternaryParameterFunc = mutable.HashSet("replace", "substring_index", "conv", "regexp_extract") private val binaryParameterFunc = mutable.HashSet("decode", "encode", "find_in_set", "levenshtein", "sha2", "trunc", "add_months", "date_add", "date_sub", "from_utc_timestamp", "to_utc_timestamp", // math function - "bround", "hypot", "log" + "hypot", "log" ) private val noParameterFunc = mutable.HashSet("current_database", "input_file_block_length", "input_file_block_start", "input_file_name", "monotonically_increasing_id", "now", "spark_partition_id", "uuid" ) - private val varArgsFunc = mutable.HashSet("months_between", "locate", "rtrim", "from_unixtime", "to_date", "to_timestamp", "split") + private val varArgsFunc = mutable.HashSet("months_between", "locate", "rtrim", "from_unixtime", "to_date", + "to_timestamp", "split", "bround", "lpad", "rpad", "round") private val bitmapUDF = mutable.HashSet("intersect_count_by_col", "subtract_bitmap_value", "subtract_bitmap_uuid"); @@ -205,24 +206,6 @@ object ExpressionConverter { abs( k_lit(children.head).cast(SparderTypeUtil .convertSqlTypeToSparkType(relDataType))) - case "round" => - var scale = children.apply(1) - if (scale.isInstanceOf[Column]) { - val extractConst = (scale: Column) => { - val extractCastValue = (child: Literal) => child.value - val reduceCast = (expr: Cast) => extractCastValue(expr.child.asInstanceOf[Literal]) - scale.expr.getClass.getSimpleName match { - case "Cast" => - reduceCast(scale.expr.asInstanceOf[Cast]) - case _ => - throw new UnsupportedOperationException(s"Scale parameter of round function doesn't support this expression " + scale.expr.toString()) - } - } - scale = extractConst(scale.asInstanceOf[Column]) - } - round( - k_lit(children.head), - scale.asInstanceOf[Int]) case "truncate" => if (children.size == 1) { k_truncate(k_lit(children.head), 0) diff --git a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala index 2adac31699..0b7116a673 100644 --- a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala +++ b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala @@ -287,7 +287,6 @@ class SparderRexVisitor(val inputFieldNames: Seq[String], assert(children.size == 2) coalesce(children.apply(0).asInstanceOf[Column], k_lit(children.apply(1))) case _ => - ExpressionConverter.convert(call.getType.getSqlTypeName, call.`type`, op.getKind, op.getName, children) } }