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 a354fbe23e2b3aa2cd80d9f4c0cd9a9be22e579f Author: jlf <longfei.ji...@kyligence.io> AuthorDate: Tue Oct 24 01:04:54 2023 -0500 KYLIN-5858 Upgrade the realization of query function `date_format` --- .../org/apache/kylin/common/KylinConfigBase.java | 1 - .../org/apache/kylin/query/udf/SparkTimeUDF.java | 5 ++ .../kylin/query/udf/formatUdf/DateFormatUDF.java | 61 ---------------------- .../org/apache/kylin/query/udf/FormatUDFTest.java | 15 ------ .../kylin/query/runtime/ExpressionConverter.scala | 2 +- 5 files changed, 6 insertions(+), 78 deletions(-) diff --git a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java index 9285486698..a7acba56bc 100644 --- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java +++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java @@ -2165,7 +2165,6 @@ public abstract class KylinConfigBase implements Serializable { udfMap.put("length", "org.apache.kylin.query.udf.stringUdf.LengthUDF"); udfMap.put("repeat", "org.apache.kylin.query.udf.stringUdf.RepeatUDF"); udfMap.put("to_char", "org.apache.kylin.query.udf.formatUdf.ToCharUDF"); - udfMap.put("date_format", "org.apache.kylin.query.udf.formatUdf.DateFormatUDF"); udfMap.put("instr", "org.apache.kylin.query.udf.stringUdf.InStrUDF"); udfMap.put("strpos", "org.apache.kylin.query.udf.stringUdf.StrPosUDF"); udfMap.put("ifnull", "org.apache.kylin.query.udf.nullHandling.IfNullUDF"); diff --git a/src/query/src/main/java/org/apache/kylin/query/udf/SparkTimeUDF.java b/src/query/src/main/java/org/apache/kylin/query/udf/SparkTimeUDF.java index 60f9805931..1bec52599a 100644 --- a/src/query/src/main/java/org/apache/kylin/query/udf/SparkTimeUDF.java +++ b/src/query/src/main/java/org/apache/kylin/query/udf/SparkTimeUDF.java @@ -106,4 +106,9 @@ public class SparkTimeUDF implements NotConstant { public Integer WEEKOFYEAR(@Parameter(name = "t1") Object exp1) throws CalciteNotSupportException { throw new CalciteNotSupportException(); } + + public String DATE_FORMAT(@Parameter(name = "left") Object left, @Parameter(name = "format") String fmt) + throws CalciteNotSupportException { + throw new CalciteNotSupportException(); + } } diff --git a/src/query/src/main/java/org/apache/kylin/query/udf/formatUdf/DateFormatUDF.java b/src/query/src/main/java/org/apache/kylin/query/udf/formatUdf/DateFormatUDF.java deleted file mode 100644 index 5f96fe48ed..0000000000 --- a/src/query/src/main/java/org/apache/kylin/query/udf/formatUdf/DateFormatUDF.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.kylin.query.udf.formatUdf; - -import java.sql.Date; -import java.sql.Timestamp; -import java.util.Locale; - -import org.apache.calcite.linq4j.function.Parameter; - -public class DateFormatUDF { - - public String DATE_FORMAT(@Parameter(name = "date") Timestamp date, @Parameter(name = "part") String part) { - String partOfDate = null; - switch (part.toUpperCase(Locale.ROOT)) { - case "YEAR": - partOfDate = date.toString().substring(0, 4); - break; - case "MONTH": - partOfDate = date.toString().substring(5, 7); - break; - case "DAY": - partOfDate = date.toString().substring(8, 10); - break; - case "HOUR": - partOfDate = date.toString().substring(11, 13); - break; - case "MINUTE": - case "MINUTES": - partOfDate = date.toString().substring(14, 16); - break; - case "SECOND": - case "SECONDS": - partOfDate = date.toString().substring(17, 19); - break; - default: - //throws - } - return partOfDate; - } - - public String DATE_FORMAT(@Parameter(name = "date") Date date, @Parameter(name = "part") String part) { - return DATE_FORMAT(new Timestamp(date.getTime()), part); - } -} diff --git a/src/query/src/test/java/org/apache/kylin/query/udf/FormatUDFTest.java b/src/query/src/test/java/org/apache/kylin/query/udf/FormatUDFTest.java index f091715843..4545ed6cf0 100644 --- a/src/query/src/test/java/org/apache/kylin/query/udf/FormatUDFTest.java +++ b/src/query/src/test/java/org/apache/kylin/query/udf/FormatUDFTest.java @@ -23,7 +23,6 @@ import static org.junit.Assert.assertEquals; import java.sql.Date; import java.sql.Timestamp; -import org.apache.kylin.query.udf.formatUdf.DateFormatUDF; import org.apache.kylin.query.udf.formatUdf.ToCharUDF; import org.junit.Test; @@ -42,18 +41,4 @@ public class FormatUDFTest { assertEquals("05", toCharUDF.TO_CHAR(Date.valueOf("2019-05-09"), "month")); assertEquals("09", toCharUDF.TO_CHAR(Date.valueOf("2019-05-09"), "day")); } - - @Test - public void testDateFormatUDF() throws Exception { - DateFormatUDF dateFormatUDF = new DateFormatUDF(); - assertEquals("2019", dateFormatUDF.DATE_FORMAT(Timestamp.valueOf("2019-05-09 11:49:45"), "year")); - assertEquals("05", dateFormatUDF.DATE_FORMAT(Timestamp.valueOf("2019-05-09 11:49:45"), "month")); - assertEquals("09", dateFormatUDF.DATE_FORMAT(Timestamp.valueOf("2019-05-09 11:49:45"), "day")); - assertEquals("11", dateFormatUDF.DATE_FORMAT(Timestamp.valueOf("2019-05-09 11:49:45"), "hour")); - assertEquals("49", dateFormatUDF.DATE_FORMAT(Timestamp.valueOf("2019-05-09 11:49:45"), "minute")); - assertEquals("45", dateFormatUDF.DATE_FORMAT(Timestamp.valueOf("2019-05-09 11:49:45"), "seconds")); - assertEquals("2019", dateFormatUDF.DATE_FORMAT(Date.valueOf("2019-05-09"), "year")); - assertEquals("05", dateFormatUDF.DATE_FORMAT(Date.valueOf("2019-05-09"), "month")); - assertEquals("09", dateFormatUDF.DATE_FORMAT(Date.valueOf("2019-05-09"), "day")); - } } 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 ee251b1e7e..5a26ebaf8a 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 @@ -48,7 +48,7 @@ object ExpressionConverter { 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", + "trunc", "add_months", "date_add", "date_sub", "from_utc_timestamp", "to_utc_timestamp", "date_format", // math function "hypot", "log" )