This is an automated email from the ASF dual-hosted git repository.

luchunliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 02a3815b43 [INLONG-10929][SDK] Support Inlong Transform function 
annotation (#10936)
02a3815b43 is described below

commit 02a3815b43959a56a7236b8377f936e7edcd9465
Author: vernedeng <verned...@apache.org>
AuthorDate: Wed Aug 28 21:16:59 2024 +0800

    [INLONG-10929][SDK] Support Inlong Transform function annotation (#10936)
    
    * [INLONG-10929][SDK] Support Inlong Transform function annotation
    
    * fix conflict
    
    * fix conflict
---
 inlong-sdk/transform-sdk/pom.xml                   |   4 +
 .../transform/process/function/AbsFunction.java    |   1 +
 .../transform/process/function/AcosFunction.java   |   1 +
 .../transform/process/function/BinFunction.java    |   1 +
 .../transform/process/function/CeilFunction.java   |   1 +
 .../transform/process/function/ConcatFunction.java |   1 +
 .../transform/process/function/CosFunction.java    |   1 +
 .../process/function/DateExtractFunction.java      |  58 +++++++++-
 .../process/function/DateFormatFunction.java       |   1 +
 .../transform/process/function/ExpFunction.java    |   1 +
 .../transform/process/function/FloorFunction.java  |   1 +
 .../process/function/FromUnixTimeFunction.java     |   1 +
 .../transform/process/function/FunctionTools.java  |  90 +++++++++++++++
 .../transform/process/function/LeftFunction.java   |   1 +
 .../transform/process/function/LengthFunction.java |   1 +
 .../sdk/transform/process/function/LnFunction.java |   1 +
 .../process/function/LocalTimeFunction.java        |   1 +
 .../transform/process/function/LocateFunction.java |   1 +
 .../transform/process/function/Log10Function.java  |   1 +
 .../transform/process/function/Log2Function.java   |   1 +
 .../transform/process/function/LogFunction.java    |   1 +
 .../transform/process/function/LowerFunction.java  |   1 +
 .../transform/process/function/Md5Function.java    |   1 +
 .../transform/process/function/ModuloFunction.java |   1 +
 .../transform/process/function/NowFunction.java    |   1 +
 .../transform/process/function/PowerFunction.java  |   1 +
 .../transform/process/function/RandFunction.java   |   1 +
 .../process/function/ReplaceFunction.java          |   1 +
 .../process/function/ReplicateFunction.java        |   1 +
 .../process/function/ReverseFunction.java          |   1 +
 .../transform/process/function/RightFunction.java  |   1 +
 .../transform/process/function/RoundFunction.java  |   1 +
 .../transform/process/function/SignFunction.java   |   1 +
 .../transform/process/function/SinFunction.java    |   1 +
 .../transform/process/function/SinhFunction.java   |   1 +
 .../transform/process/function/SqrtFunction.java   |   1 +
 .../process/function/SubstringFunction.java        |   1 +
 .../transform/process/function/TanFunction.java    |   1 +
 .../process/function/TimestampAddFunction.java     |   1 +
 .../process/function/TimestampExtractFunction.java |  26 ++++-
 .../process/function/ToBase64Function.java         |   1 +
 .../transform/process/function/ToDateFunction.java |   1 +
 .../process/function/ToTimestampFunction.java      |   1 +
 .../{NowFunction.java => TransformFunction.java}   |  34 ++----
 .../process/function/TranslateFunction.java        |   1 +
 .../transform/process/function/TrimFunction.java   |   1 +
 .../process/function/UnixTimestampFunction.java    |   1 +
 .../transform/process/function/UpperFunction.java  |   1 +
 .../transform/process/operator/OperatorTools.java  | 125 +--------------------
 .../TestTransformTemporalFunctionsProcessor.java   |  42 +++----
 50 files changed, 251 insertions(+), 171 deletions(-)

diff --git a/inlong-sdk/transform-sdk/pom.xml b/inlong-sdk/transform-sdk/pom.xml
index 63659e0812..4770f0025d 100644
--- a/inlong-sdk/transform-sdk/pom.xml
+++ b/inlong-sdk/transform-sdk/pom.xml
@@ -58,6 +58,10 @@
             <artifactId>protobuf-java-util</artifactId>
             <version>${protobuf.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
index d2b2ceace6..497a69c0f6 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * AbsFunction
  * description: abs(numeric)--returns the absolute value of numeric
  */
+@TransformFunction(names = {"abs"})
 public class AbsFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AcosFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AcosFunction.java
index 332716e57b..ba2249faef 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AcosFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AcosFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * AcosFunction
  * description: acos(numeric)--returns the arc cosine of numeric
  */
+@TransformFunction(names = {"acos"})
 public class AcosFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/BinFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/BinFunction.java
index ae4dbc96e7..bfb2bbc6bd 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/BinFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/BinFunction.java
@@ -31,6 +31,7 @@ import java.util.List;
  * BinFunction
  * description: bin(integer)--Returns a string representation of an integer in 
binary format. If the integer is NULL, NULL is returned.
  */
+@TransformFunction(names = {"bin"})
 public class BinFunction implements ValueParser {
 
     private ValueParser valueParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/CeilFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/CeilFunction.java
index adb472ae6b..bd44238524 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/CeilFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/CeilFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * CeilFunction
  * description: ceil(numeric)--rounds numeric up, and returns the smallest 
number that is greater than or equal to numeric
  */
+@TransformFunction(names = {"ceil"})
 public class CeilFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ConcatFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ConcatFunction.java
index 529ddad007..4ea0b2e6f6 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ConcatFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ConcatFunction.java
@@ -32,6 +32,7 @@ import java.util.List;
  * ConcatFunction
  * 
  */
+@TransformFunction(names = {"concat"})
 public class ConcatFunction implements ValueParser {
 
     private List<ValueParser> nodeList;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/CosFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/CosFunction.java
index bbe9c9da96..d718551094 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/CosFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/CosFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * CosFunction
  * description: cos(numeric)--returns the cosine of numeric
  */
+@TransformFunction(names = {"cos"})
 public class CosFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateExtractFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateExtractFunction.java
index 896b67c31a..ff0eb6b01e 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateExtractFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateExtractFunction.java
@@ -43,7 +43,7 @@ import java.util.Locale;
  * - dayofmonth(date)--returns the day of a month (an integer between 1 and 
31) from SQL date
  * - dayofweek(date)--returns the day of a week (an integer between 1(Sunday) 
and 7(Saturday)) from SQL date
  */
-public class DateExtractFunction implements ValueParser {
+public abstract class DateExtractFunction implements ValueParser {
 
     private DateExtractFunctionType type;
     private ValueParser dateParser;
@@ -53,6 +53,62 @@ public class DateExtractFunction implements ValueParser {
         YEAR, QUARTER, MONTH, WEEK, DAY_OF_YEAR, DAY_OF_MONTH, DAY_OF_WEEK
     }
 
+    @TransformFunction(names = {"year"})
+    public static class YearExtractFunction extends DateExtractFunction {
+
+        public YearExtractFunction(Function expr) {
+            super(DateExtractFunctionType.YEAR, expr);
+        }
+    }
+
+    @TransformFunction(names = {"quarter"})
+    public static class QuarterExtractFunction extends DateExtractFunction {
+
+        public QuarterExtractFunction(Function expr) {
+            super(DateExtractFunctionType.QUARTER, expr);
+        }
+    }
+
+    @TransformFunction(names = {"month"})
+    public static class MonthExtractFunction extends DateExtractFunction {
+
+        public MonthExtractFunction(Function expr) {
+            super(DateExtractFunctionType.MONTH, expr);
+        }
+    }
+
+    @TransformFunction(names = {"week"})
+    public static class WeekExtractFunction extends DateExtractFunction {
+
+        public WeekExtractFunction(Function expr) {
+            super(DateExtractFunctionType.WEEK, expr);
+        }
+    }
+
+    @TransformFunction(names = {"day_of_year"})
+    public static class DayOfYearExtractFunction extends DateExtractFunction {
+
+        public DayOfYearExtractFunction(Function expr) {
+            super(DateExtractFunctionType.DAY_OF_YEAR, expr);
+        }
+    }
+
+    @TransformFunction(names = {"day_of_month"})
+    public static class DayOfMonthExtractFunction extends DateExtractFunction {
+
+        public DayOfMonthExtractFunction(Function expr) {
+            super(DateExtractFunctionType.DAY_OF_MONTH, expr);
+        }
+    }
+
+    @TransformFunction(names = {"day_of_week"})
+    public static class DayOfWeekExtractFunction extends DateExtractFunction {
+
+        public DayOfWeekExtractFunction(Function expr) {
+            super(DateExtractFunctionType.DAY_OF_WEEK, expr);
+        }
+    }
+
     public DateExtractFunction(DateExtractFunctionType type, Function expr) {
         this.type = type;
         List<Expression> expressions = expr.getParameters().getExpressions();
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateFormatFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateFormatFunction.java
index f5ae9bfd88..b340b7bb4e 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateFormatFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateFormatFunction.java
@@ -37,6 +37,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * description: date_format(timestamp,format)--converts timestamp(in seconds) 
to a value of string in the format
  * specified by the date format string. The format string is compatible with 
Java’s SimpleDateFormat
  */
+@TransformFunction(names = {"date_format"})
 public class DateFormatFunction implements ValueParser {
 
     private ValueParser timestampParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
index 5a7a9bbfac..6761a06a55 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * ExpFunction
  * description: exp(numeric)--returns e raised to the power of numeric
  */
+@TransformFunction(names = {"exp"})
 public class ExpFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FloorFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FloorFunction.java
index 9d5322570b..1096d2e28a 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FloorFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FloorFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * FloorFunction
  * description: floor(numeric)--rounds numeric down, and returns the largest 
number that is less than or equal to numeric
  */
+@TransformFunction(names = {"floor"})
 public class FloorFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FromUnixTimeFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FromUnixTimeFunction.java
index d8a423ca2d..b7b68a0e73 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FromUnixTimeFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FromUnixTimeFunction.java
@@ -41,6 +41,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * format(default is ‘yyyy-MM-dd HH:mm:ss’). numeric is an internal timestamp 
value representing seconds
  * since ‘1970-01-01 00:00:00’ UTC, such as produced by the UNIX_TIMESTAMP() 
function.
  */
+@TransformFunction(names = {"from_unix_time"})
 public class FromUnixTimeFunction implements ValueParser {
 
     private ValueParser numericParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FunctionTools.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FunctionTools.java
new file mode 100644
index 0000000000..b351aee06b
--- /dev/null
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/FunctionTools.java
@@ -0,0 +1,90 @@
+/*
+ * 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.inlong.sdk.transform.process.function;
+
+import org.apache.inlong.sdk.transform.process.parser.ColumnParser;
+import org.apache.inlong.sdk.transform.process.parser.ValueParser;
+
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import net.sf.jsqlparser.expression.Function;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.reflections.Reflections;
+import org.reflections.scanners.Scanners;
+
+import java.lang.reflect.Constructor;
+import java.util.Map;
+import java.util.Set;
+
+@Slf4j
+public class FunctionTools {
+
+    private static final String FUNCTION_PATH = 
"org.apache.inlong.sdk.transform.process.function";
+    private final static Map<String, Class<?>> functionMap = 
Maps.newConcurrentMap();
+
+    static {
+        init();
+    }
+
+    private static void init() {
+        Reflections reflections = new Reflections(FUNCTION_PATH, 
Scanners.TypesAnnotated);
+        Set<Class<?>> clazzSet = 
reflections.getTypesAnnotatedWith(TransformFunction.class);
+        for (Class<?> clazz : clazzSet) {
+            TransformFunction annotation = 
clazz.getAnnotation(TransformFunction.class);
+            if (annotation == null || ArrayUtils.isEmpty(annotation.names())) {
+                continue;
+            }
+
+            String[] functionNames = annotation.names();
+            for (String functionName : functionNames) {
+                if (StringUtils.isEmpty(functionName)) {
+                    continue;
+                }
+
+                functionMap.compute(functionName, (name, former) -> {
+                    if (former != null) {
+                        log.warn("find a conflict function named [{}], the 
former one is [{}], new one is [{}]",
+                                name, former.getName(), clazz.getName());
+                    }
+                    return clazz;
+                });
+            }
+
+        }
+    }
+
+    public static ValueParser getTransformFunction(Function func) {
+        String functionName = func.getName();
+        Class<?> clazz = functionMap.get(functionName);
+        if (clazz == null) {
+            return new ColumnParser(func);
+        }
+        try {
+            Constructor<?> constructor = 
clazz.getDeclaredConstructor(func.getClass());
+            return (ValueParser) constructor.newInstance(func);
+        } catch (NoSuchMethodException e) {
+            log.error("transform function {} needs one constructor that accept 
one params whose type is {}",
+                    clazz.getName(), func.getClass().getName(), e);
+            throw new RuntimeException(e);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LeftFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LeftFunction.java
index e86d770f92..17c0388254 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LeftFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LeftFunction.java
@@ -34,6 +34,7 @@ import java.util.List;
  * - return "" if it is less than or equal to zero
  * - return a substring of length starting from the right side of the string.
  */
+@TransformFunction(names = {"left"})
 public class LeftFunction implements ValueParser {
 
     private final ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LengthFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LengthFunction.java
index 5a01652c93..0c1abba8f0 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LengthFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LengthFunction.java
@@ -30,6 +30,7 @@ import net.sf.jsqlparser.expression.Function;
  * - return the length of the string
  * - return NULL if the string is NULL
  */
+@TransformFunction(names = {"length"})
 public class LengthFunction implements ValueParser {
 
     private final ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
index 530b2ff4f8..29a0ac64ed 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * LnFunction
  * description: ln(numeric)--returns the natural logarithm (base e) of numeric
  */
+@TransformFunction(names = {"ln"})
 public class LnFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LocalTimeFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LocalTimeFunction.java
index a3072901a3..9a40aeb3df 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LocalTimeFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LocalTimeFunction.java
@@ -33,6 +33,7 @@ import java.time.ZoneId;
  *  localTime([string1]) returns the current time in the specified time zone.
  *  (by default: the current time in the system time zone)
  */
+@TransformFunction(names = {"localtime", "current_time"})
 public class LocalTimeFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LocateFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LocateFunction.java
index e300815eec..179d56f36d 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LocateFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LocateFunction.java
@@ -34,6 +34,7 @@ import java.util.List;
  * - returns 0 if not found
  * - returns NULL if any of arguments is NULL
  */
+@TransformFunction(names = {"locate"})
 public class LocateFunction implements ValueParser {
 
     private ValueParser stringParser1;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
index e968a27aa1..b35c6cb50b 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * Log10Function
  * description: log10(numeric)--returns the base 10 logarithm of numeric
  */
+@TransformFunction(names = {"log10"})
 public class Log10Function implements ValueParser {
 
     private final ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
index 914bc69ac3..f73ed19176 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * Log2Function
  * description: log2(numeric)--returns the base 2 logarithm of numeric
  */
+@TransformFunction(names = {"log2"})
 public class Log2Function implements ValueParser {
 
     private final ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
index ddbcd71a97..bcaf2578e8 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
@@ -33,6 +33,7 @@ import java.util.List;
  * description: log(numeric) or log(numeric1, numeric2)--When called with one 
argument, returns the natural logarithm
  * of numeric. When called with two arguments, this function returns the 
logarithm of numeric2 to the base numeric1
  */
+@TransformFunction(names = {"log"})
 public class LogFunction implements ValueParser {
 
     private ValueParser baseParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LowerFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LowerFunction.java
index e6aa83c58c..f6b91cf77d 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LowerFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LowerFunction.java
@@ -28,6 +28,7 @@ import net.sf.jsqlparser.expression.Function;
  * LowerFunction
  * description: LOWER(s): Convert all letters of the string s to lowercase 
letters
  */
+@TransformFunction(names = {"lower"})
 public class LowerFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Md5Function.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Md5Function.java
index 027511864a..c9f7b78e81 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Md5Function.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Md5Function.java
@@ -31,6 +31,7 @@ import java.nio.charset.StandardCharsets;
  * Md5Function
  * description: MD5(string): Return the MD5 hash value of a string in the form 
of a 32-bit hexadecimal digit string; If the string is NULL, return NULL.
  */
+@TransformFunction(names = {"md5"})
 public class Md5Function implements ValueParser {
 
     private ValueParser msgParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ModuloFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ModuloFunction.java
index b6b8b3c0af..8f88c03f4d 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ModuloFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ModuloFunction.java
@@ -32,6 +32,7 @@ import java.util.List;
  * ModuloFunction
  * description: MOD(NUMERIC1, NUMERIC2) : Return the remainder of numeric1 
divided by numeric2.
  */
+@TransformFunction(names = {"mod"})
 public class ModuloFunction implements ValueParser {
 
     private ValueParser dividendParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/NowFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/NowFunction.java
index 3857f22147..e26c07804a 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/NowFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/NowFunction.java
@@ -27,6 +27,7 @@ import net.sf.jsqlparser.expression.Function;
  * NowFunction
  * 
  */
+@TransformFunction(names = {"now"})
 public class NowFunction implements ValueParser {
 
     /**
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
index 938fc00f6d..737fc484cf 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * PowerFunction
  * description: power(numeric1, numeric2)--returns numeric1.power(numeric2)
  */
+@TransformFunction(names = {"power"})
 public class PowerFunction implements ValueParser {
 
     private ValueParser baseParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RandFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RandFunction.java
index 2baebe038a..76a58f2bfc 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RandFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RandFunction.java
@@ -34,6 +34,7 @@ import java.util.Random;
  * description: Rand()--Returns a pseudo-random double precision value in the 
range [0.0, 1.0)
  *              Rand(Integer)--Returns a pseudo-random double precision value 
in the range [0.0, 1.0) with an initial seed of Integer.
  */
+@TransformFunction(names = {"rand"})
 public class RandFunction implements ValueParser {
 
     private ValueParser seedParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReplaceFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReplaceFunction.java
index d9d1d26a21..e343570eaa 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReplaceFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReplaceFunction.java
@@ -31,6 +31,7 @@ import java.util.List;
  * ReplaceFunction
  * description: replace(s, s1, s2)--replace string s1 in string s with string 
s2.
  */
+@TransformFunction(names = {"replace"})
 public class ReplaceFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReplicateFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReplicateFunction.java
index 5270720d44..82755a5baa 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReplicateFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReplicateFunction.java
@@ -30,6 +30,7 @@ import java.util.List;
  * ReplicateFunction
  * description: replicate(string, numeric)--Repeat the string numeric times 
and return a new string
  */
+@TransformFunction(names = {"replicate"})
 public class ReplicateFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReverseFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReverseFunction.java
index 5015e0225a..58f6fb1dcf 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReverseFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ReverseFunction.java
@@ -28,6 +28,7 @@ import net.sf.jsqlparser.expression.Function;
  * description: reverse(string)--returns the string with the order of the 
characters reversed.
  * returns NULL if string is a empty string.
  */
+@TransformFunction(names = {"reverse"})
 public class ReverseFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RightFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RightFunction.java
index 8260d3f299..1190cb7fd6 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RightFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RightFunction.java
@@ -34,6 +34,7 @@ import java.util.List;
  * - return "" if it is less than or equal to zero
  * - return a substring of length starting from the right side of the string.
  */
+@TransformFunction(names = {"right"})
 public class RightFunction implements ValueParser {
 
     private final ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RoundFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RoundFunction.java
index ecad419635..60d915922d 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RoundFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/RoundFunction.java
@@ -33,6 +33,7 @@ import java.util.List;
  * RoundFunction
  * description: ROUND(x [,y]) -- Return the nearest integer to x, with 
optional parameter y indicating the number of decimal places to be rounded. If 
omitted, return the integer.
  */
+@TransformFunction(names = {"round"})
 public class RoundFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SignFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SignFunction.java
index 792c8baf26..d9db985e5e 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SignFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SignFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * SignFunction
  * description: sign(x): Return the sign of x, where x is a negative number, 
0, and positive numbers return -1, 0, and 1, respectively
  */
+@TransformFunction(names = {"sign"})
 public class SignFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SinFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SinFunction.java
index 5f97ccc119..dec7006f2e 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SinFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SinFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * SinFunction
  * description: sin(numeric)--returns the sine of numeric
  */
+@TransformFunction(names = {"sin"})
 public class SinFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SinhFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SinhFunction.java
index 7eb947aeb2..0b19bd1695 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SinhFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SinhFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * SinhFunction
  * description: sinh(numeric)--returns the hyperbolic sine of numeric
  */
+@TransformFunction(names = {"sinh"})
 public class SinhFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
index 69cf43041a..3ebadf45a9 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
  * SqrtFunction
  * description: sqrt(numeric)--returns the square root of numeric
  */
+@TransformFunction(names = {"sqrt"})
 public class SqrtFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SubstringFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SubstringFunction.java
index 063686aa55..772dc2950c 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SubstringFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SubstringFunction.java
@@ -32,6 +32,7 @@ import java.util.List;
  * description: substring(string FROM INT1 [ FOR INT2 ])--returns a substring 
of STRING starting from position INT1 with
  * length INT2 (to the end by default)
  */
+@TransformFunction(names = {"substring"})
 public class SubstringFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TanFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TanFunction.java
index ed673f1ef6..baa9de8890 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TanFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TanFunction.java
@@ -29,6 +29,7 @@ import java.math.BigDecimal;
  * TanFunction
  * description: tan(numeric)--returns the tangent of numeric
  */
+@TransformFunction(names = {"tan"})
 public class TanFunction implements ValueParser {
 
     private ValueParser numberParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TimestampAddFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TimestampAddFunction.java
index e09512cdfd..9bcbb8c8e4 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TimestampAddFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TimestampAddFunction.java
@@ -36,6 +36,7 @@ import java.util.List;
  *  The unit of the time interval is specified by the unit parameter, which 
should be one of the following values:
  *  FRAC_SECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.
  */
+@TransformFunction(names = {"timestamp_add"})
 public class TimestampAddFunction implements ValueParser {
 
     private ValueParser intervalParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TimestampExtractFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TimestampExtractFunction.java
index 6af01e675e..30ab279a31 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TimestampExtractFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TimestampExtractFunction.java
@@ -36,7 +36,7 @@ import java.util.List;
  * - minute(timestamp)--returns the minute of an hour (an integer between 0 
and 59) from SQL timestamp
  * - second(timestamp)--returns the second of a minute (an integer between 0 
and 59) from SQL timestamp
  */
-public class TimestampExtractFunction implements ValueParser {
+public abstract class TimestampExtractFunction implements ValueParser {
 
     private TimestampExtractFunctionType type;
     private ValueParser timestampParser;
@@ -45,6 +45,30 @@ public class TimestampExtractFunction implements ValueParser 
{
         HOUR, MINUTE, SECOND
     }
 
+    @TransformFunction(names = {"hour"})
+    public static class HourExtractFunction extends TimestampExtractFunction {
+
+        public HourExtractFunction(Function expr) {
+            super(TimestampExtractFunctionType.HOUR, expr);
+        }
+    }
+
+    @TransformFunction(names = {"minute"})
+    public static class MinuteExtractFunction extends TimestampExtractFunction 
{
+
+        public MinuteExtractFunction(Function expr) {
+            super(TimestampExtractFunctionType.MINUTE, expr);
+        }
+    }
+
+    @TransformFunction(names = {"second"})
+    public static class SecondExtractFunction extends TimestampExtractFunction 
{
+
+        public SecondExtractFunction(Function expr) {
+            super(TimestampExtractFunctionType.SECOND, expr);
+        }
+    }
+
     public TimestampExtractFunction(TimestampExtractFunctionType type, 
Function expr) {
         this.type = type;
         List<Expression> expressions = expr.getParameters().getExpressions();
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToBase64Function.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToBase64Function.java
index a82f36d9c2..7352f6f61a 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToBase64Function.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToBase64Function.java
@@ -31,6 +31,7 @@ import java.util.Base64;
  * ToBase64Function
  * description: to_base64(string1)--returns the base64-encoded result from 
string1
  */
+@TransformFunction(names = {"to_base64"})
 public class ToBase64Function implements ValueParser {
 
     private final ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToDateFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToDateFunction.java
index 5a03f1d2e4..ec77b446ac 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToDateFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToDateFunction.java
@@ -35,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * ToDateFunction
  * description: to_date(string1[, string2])--converts a date string string1 
with format string2 (by default ‘yyyy-MM-dd’) to a date
  */
+@TransformFunction(names = {"to_date"})
 public class ToDateFunction implements ValueParser {
 
     private ValueParser stringParser1;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToTimestampFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToTimestampFunction.java
index 45f51511f1..1b97263324 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToTimestampFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ToTimestampFunction.java
@@ -41,6 +41,7 @@ import java.util.List;
  * to_timestamp(string1[, string2])--converts date time string string1 in 
format string2
  * (by default: yyyy-MM-dd HH:mm:ss if not specified) under the ‘UTC+0’ time 
zone to a timestamp
  */
+@TransformFunction(names = {"to_timestamp"})
 public class ToTimestampFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/NowFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TransformFunction.java
similarity index 56%
copy from 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/NowFunction.java
copy to 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TransformFunction.java
index 3857f22147..b78d2b31f9 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/NowFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TransformFunction.java
@@ -17,33 +17,15 @@
 
 package org.apache.inlong.sdk.transform.process.function;
 
-import org.apache.inlong.sdk.transform.decode.SourceData;
-import org.apache.inlong.sdk.transform.process.Context;
-import org.apache.inlong.sdk.transform.process.parser.ValueParser;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
 
-import net.sf.jsqlparser.expression.Function;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
-/**
- * NowFunction
- * 
- */
-public class NowFunction implements ValueParser {
-
-    /**
-     * Constructor
-     * @param expr
-     */
-    public NowFunction(Function expr) {
-    }
+@Retention(RUNTIME)
+@Target(TYPE)
+public @interface TransformFunction {
 
-    /**
-     * parse
-     * @param sourceData
-     * @param rowIndex
-     * @return
-     */
-    @Override
-    public Object parse(SourceData sourceData, int rowIndex, Context context) {
-        return String.valueOf(System.currentTimeMillis());
-    }
+    String[] names();
 }
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TranslateFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TranslateFunction.java
index ce05eb0fc3..87920b8619 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TranslateFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TranslateFunction.java
@@ -49,6 +49,7 @@ import java.util.Map;
  *      case1: translate(email, '@', '.') -> original_expression: 
ha...@inlong.com  target_expression: harry.inlong.com
  *      case2: translate(hello WorD, 'WD', 'wd') -> original_expression: hello 
WorD  target_expression: hello word
  */
+@TransformFunction(names = {"translate"})
 public class TranslateFunction implements ValueParser {
 
     private ValueParser originalStrParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TrimFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TrimFunction.java
index b3fbaf26dc..7727d6dd52 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TrimFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TrimFunction.java
@@ -28,6 +28,7 @@ import net.sf.jsqlparser.expression.Function;
  * TrimFunction
  * description: trim(string)--Remove Spaces before and after the string.
  */
+@TransformFunction(names = {"trim"})
 public class TrimFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/UnixTimestampFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/UnixTimestampFunction.java
index 518fb6a646..9737ff2a10 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/UnixTimestampFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/UnixTimestampFunction.java
@@ -38,6 +38,7 @@ import java.util.List;
  * unix_timestamp(string1[, string2]): converts date time string string1 in 
format string2
  * (by default: yyyy-MM-dd HH:mm:ss if not specified) to Unix timestamp (in 
seconds)
  */
+@TransformFunction(names = {"unix_timestamp"})
 public class UnixTimestampFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/UpperFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/UpperFunction.java
index 393b1abde4..45eead1380 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/UpperFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/UpperFunction.java
@@ -28,6 +28,7 @@ import net.sf.jsqlparser.expression.Function;
  * UpperFunction
  * description: UPPER(s): Convert a string to uppercase
  */
+@TransformFunction(names = {"upper"})
 public class UpperFunction implements ValueParser {
 
     private ValueParser stringParser;
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
index eb39599b47..90405d687c 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
@@ -17,52 +17,7 @@
 
 package org.apache.inlong.sdk.transform.process.operator;
 
-import org.apache.inlong.sdk.transform.process.function.AbsFunction;
-import org.apache.inlong.sdk.transform.process.function.AcosFunction;
-import org.apache.inlong.sdk.transform.process.function.BinFunction;
-import org.apache.inlong.sdk.transform.process.function.CeilFunction;
-import org.apache.inlong.sdk.transform.process.function.ConcatFunction;
-import org.apache.inlong.sdk.transform.process.function.CosFunction;
-import org.apache.inlong.sdk.transform.process.function.DateExtractFunction;
-import 
org.apache.inlong.sdk.transform.process.function.DateExtractFunction.DateExtractFunctionType;
-import org.apache.inlong.sdk.transform.process.function.DateFormatFunction;
-import org.apache.inlong.sdk.transform.process.function.ExpFunction;
-import org.apache.inlong.sdk.transform.process.function.FloorFunction;
-import org.apache.inlong.sdk.transform.process.function.FromUnixTimeFunction;
-import org.apache.inlong.sdk.transform.process.function.LeftFunction;
-import org.apache.inlong.sdk.transform.process.function.LengthFunction;
-import org.apache.inlong.sdk.transform.process.function.LnFunction;
-import org.apache.inlong.sdk.transform.process.function.LocalTimeFunction;
-import org.apache.inlong.sdk.transform.process.function.LocateFunction;
-import org.apache.inlong.sdk.transform.process.function.Log10Function;
-import org.apache.inlong.sdk.transform.process.function.Log2Function;
-import org.apache.inlong.sdk.transform.process.function.LogFunction;
-import org.apache.inlong.sdk.transform.process.function.LowerFunction;
-import org.apache.inlong.sdk.transform.process.function.Md5Function;
-import org.apache.inlong.sdk.transform.process.function.ModuloFunction;
-import org.apache.inlong.sdk.transform.process.function.NowFunction;
-import org.apache.inlong.sdk.transform.process.function.PowerFunction;
-import org.apache.inlong.sdk.transform.process.function.RandFunction;
-import org.apache.inlong.sdk.transform.process.function.ReplaceFunction;
-import org.apache.inlong.sdk.transform.process.function.ReplicateFunction;
-import org.apache.inlong.sdk.transform.process.function.ReverseFunction;
-import org.apache.inlong.sdk.transform.process.function.RightFunction;
-import org.apache.inlong.sdk.transform.process.function.RoundFunction;
-import org.apache.inlong.sdk.transform.process.function.SignFunction;
-import org.apache.inlong.sdk.transform.process.function.SinFunction;
-import org.apache.inlong.sdk.transform.process.function.SinhFunction;
-import org.apache.inlong.sdk.transform.process.function.SqrtFunction;
-import org.apache.inlong.sdk.transform.process.function.SubstringFunction;
-import org.apache.inlong.sdk.transform.process.function.TanFunction;
-import org.apache.inlong.sdk.transform.process.function.TimestampAddFunction;
-import 
org.apache.inlong.sdk.transform.process.function.TimestampExtractFunction;
-import org.apache.inlong.sdk.transform.process.function.ToBase64Function;
-import org.apache.inlong.sdk.transform.process.function.ToDateFunction;
-import org.apache.inlong.sdk.transform.process.function.ToTimestampFunction;
-import org.apache.inlong.sdk.transform.process.function.TranslateFunction;
-import org.apache.inlong.sdk.transform.process.function.TrimFunction;
-import org.apache.inlong.sdk.transform.process.function.UnixTimestampFunction;
-import org.apache.inlong.sdk.transform.process.function.UpperFunction;
+import org.apache.inlong.sdk.transform.process.function.FunctionTools;
 import org.apache.inlong.sdk.transform.process.parser.AdditionParser;
 import org.apache.inlong.sdk.transform.process.parser.ColumnParser;
 import org.apache.inlong.sdk.transform.process.parser.DateParser;
@@ -107,12 +62,10 @@ import org.apache.commons.lang.ObjectUtils;
 import java.math.BigDecimal;
 import java.sql.Date;
 import java.sql.Timestamp;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * OperatorTools
- *
+ * 
  */
 public class OperatorTools {
 
@@ -120,70 +73,6 @@ public class OperatorTools {
 
     public static final String CHILD_KEY = "$child";
 
-    private static final Map<String, java.util.function.Function<Function, 
ValueParser>> functionMap = new HashMap<>();
-
-    static {
-        functionMap.put("concat", ConcatFunction::new);
-        functionMap.put("now", NowFunction::new);
-        functionMap.put("localtime", LocalTimeFunction::new);
-        functionMap.put("currenttime", LocalTimeFunction::new);
-        functionMap.put("power", PowerFunction::new);
-        functionMap.put("abs", AbsFunction::new);
-        functionMap.put("sqrt", SqrtFunction::new);
-        functionMap.put("ln", LnFunction::new);
-        functionMap.put("log10", Log10Function::new);
-        functionMap.put("log2", Log2Function::new);
-        functionMap.put("log", LogFunction::new);
-        functionMap.put("exp", ExpFunction::new);
-        functionMap.put("reverse", ReverseFunction::new);
-        functionMap.put("substring", SubstringFunction::new);
-        functionMap.put("trim", TrimFunction::new);
-        functionMap.put("sign", SignFunction::new);
-        functionMap.put("replicate", ReplicateFunction::new);
-        functionMap.put("locate", LocateFunction::new);
-        functionMap.put("to_date", ToDateFunction::new);
-        functionMap.put("date_format", DateFormatFunction::new);
-        functionMap.put("ceil", CeilFunction::new);
-        functionMap.put("rand", RandFunction::new);
-        functionMap.put("floor", FloorFunction::new);
-        functionMap.put("sin", SinFunction::new);
-        functionMap.put("sinh", SinhFunction::new);
-        functionMap.put("cos", CosFunction::new);
-        functionMap.put("acos", AcosFunction::new);
-        functionMap.put("tan", TanFunction::new);
-        functionMap.put("bin", BinFunction::new);
-        functionMap.put("year", func -> new 
DateExtractFunction(DateExtractFunctionType.YEAR, func));
-        functionMap.put("quarter", func -> new 
DateExtractFunction(DateExtractFunctionType.QUARTER, func));
-        functionMap.put("month", func -> new 
DateExtractFunction(DateExtractFunctionType.MONTH, func));
-        functionMap.put("week", func -> new 
DateExtractFunction(DateExtractFunctionType.WEEK, func));
-        functionMap.put("dayofyear", func -> new 
DateExtractFunction(DateExtractFunctionType.DAY_OF_YEAR, func));
-        functionMap.put("dayofmonth", func -> new 
DateExtractFunction(DateExtractFunctionType.DAY_OF_MONTH, func));
-        functionMap.put("dayofweek", func -> new 
DateExtractFunction(DateExtractFunctionType.DAY_OF_WEEK, func));
-        functionMap.put("hour",
-                func -> new 
TimestampExtractFunction(TimestampExtractFunction.TimestampExtractFunctionType.HOUR,
 func));
-        functionMap.put("minute",
-                func -> new 
TimestampExtractFunction(TimestampExtractFunction.TimestampExtractFunctionType.MINUTE,
-                        func));
-        functionMap.put("second",
-                func -> new 
TimestampExtractFunction(TimestampExtractFunction.TimestampExtractFunctionType.SECOND,
-                        func));
-        functionMap.put("round", RoundFunction::new);
-        functionMap.put("from_unixtime", FromUnixTimeFunction::new);
-        functionMap.put("unix_timestamp", UnixTimestampFunction::new);
-        functionMap.put("to_timestamp", ToTimestampFunction::new);
-        functionMap.put("mod", ModuloFunction::new);
-        functionMap.put("to_base64", ToBase64Function::new);
-        functionMap.put("lower", LowerFunction::new);
-        functionMap.put("upper", UpperFunction::new);
-        functionMap.put("length", LengthFunction::new);
-        functionMap.put("replace", ReplaceFunction::new);
-        functionMap.put("left", LeftFunction::new);
-        functionMap.put("right", RightFunction::new);
-        functionMap.put("timestampadd", TimestampAddFunction::new);
-        functionMap.put("md5", Md5Function::new);
-        functionMap.put("translate", TranslateFunction::new);
-    }
-
     public static ExpressionOperator buildOperator(Expression expr) {
         if (expr instanceof AndExpression) {
             return new AndOperator((AndExpression) expr);
@@ -241,15 +130,7 @@ public class OperatorTools {
             if (exprString.startsWith(ROOT_KEY) || 
exprString.startsWith(CHILD_KEY)) {
                 return new ColumnParser((Function) expr);
             } else {
-                // TODO
-                Function func = (Function) expr;
-                java.util.function.Function<Function, ValueParser> 
valueParserConstructor =
-                        functionMap.get(func.getName().toLowerCase());
-                if (valueParserConstructor != null) {
-                    return valueParserConstructor.apply(func);
-                } else {
-                    return new ColumnParser(func);
-                }
+                return FunctionTools.getTransformFunction((Function) expr);
             }
         }
         return null;
diff --git 
a/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformTemporalFunctionsProcessor.java
 
b/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformTemporalFunctionsProcessor.java
index 8c99b2a6bd..e0830dd72e 100644
--- 
a/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformTemporalFunctionsProcessor.java
+++ 
b/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformTemporalFunctionsProcessor.java
@@ -186,7 +186,7 @@ public class TestTransformTemporalFunctionsProcessor {
         Assert.assertEquals(1, output4.size());
         Assert.assertEquals(output4.get(0), "result=9");
 
-        String transformSql5 = "select dayofyear(string1) from source";
+        String transformSql5 = "select day_of_year(string1) from source";
         TransformConfig config5 = new TransformConfig(transformSql5);
         TransformProcessor<String, String> processor5 = TransformProcessor
                 .create(config5, 
SourceDecoderFactory.createCsvDecoder(csvSource),
@@ -196,7 +196,7 @@ public class TestTransformTemporalFunctionsProcessor {
         Assert.assertEquals(1, output5.size());
         Assert.assertEquals(output5.get(0), "result=60");
 
-        String transformSql6 = "select dayofmonth(string1) from source";
+        String transformSql6 = "select day_of_month(string1) from source";
         TransformConfig config6 = new TransformConfig(transformSql6);
         TransformProcessor<String, String> processor6 = TransformProcessor
                 .create(config6, 
SourceDecoderFactory.createCsvDecoder(csvSource),
@@ -206,7 +206,7 @@ public class TestTransformTemporalFunctionsProcessor {
         Assert.assertEquals(1, output6.size());
         Assert.assertEquals(output6.get(0), "result=29");
 
-        String transformSql7 = "select dayofweek(string1) from source";
+        String transformSql7 = "select day_of_week(string1) from source";
         TransformConfig config7 = new TransformConfig(transformSql7);
         TransformProcessor<String, String> processor7 = TransformProcessor
                 .create(config7, 
SourceDecoderFactory.createCsvDecoder(csvSource),
@@ -252,42 +252,42 @@ public class TestTransformTemporalFunctionsProcessor {
 
     @Test
     public void testFromUnixTimeFunction() throws Exception {
-        String transformSql1 = "select from_unixtime(numeric1) from source";
+        String transformSql1 = "select from_unix_time(numeric1) from source";
         TransformConfig config1 = new TransformConfig(transformSql1);
         TransformProcessor<String, String> processor1 = TransformProcessor
                 .create(config1, 
SourceDecoderFactory.createCsvDecoder(csvSource),
                         SinkEncoderFactory.createKvEncoder(kvSink));
-        // case1: from_unixtime(44)
+        // case1: from_unix_time(44)
         List<String> output1 = processor1.transform("can|apple|cloud|44|1|3", 
new HashMap<>());
         Assert.assertEquals(1, output1.size());
         Assert.assertEquals(output1.get(0), "result=1970-01-01 08:00:44");
 
-        String transformSql2 = "select from_unixtime(numeric1, 'yyyy/MM/dd 
HH:mm:ss') from source";
+        String transformSql2 = "select from_unix_time(numeric1, 'yyyy/MM/dd 
HH:mm:ss') from source";
         TransformConfig config2 = new TransformConfig(transformSql2);
         TransformProcessor<String, String> processor2 = TransformProcessor
                 .create(config2, 
SourceDecoderFactory.createCsvDecoder(csvSource),
                         SinkEncoderFactory.createKvEncoder(kvSink));
-        // case2: from_unixtime(44, 'yyyy/MM/dd HH:mm:ss')
+        // case2: from_unix_time(44, 'yyyy/MM/dd HH:mm:ss')
         List<String> output2 = processor2.transform("can|apple|cloud|44|1|3", 
new HashMap<>());
         Assert.assertEquals(1, output2.size());
         Assert.assertEquals(output2.get(0), "result=1970/01/01 08:00:44");
 
-        String transformSql3 = "select from_unixtime(numeric1, 'MMdd-yyyy') 
from source";
+        String transformSql3 = "select from_unix_time(numeric1, 'MMdd-yyyy') 
from source";
         TransformConfig config3 = new TransformConfig(transformSql3);
         TransformProcessor<String, String> processor3 = TransformProcessor
                 .create(config3, 
SourceDecoderFactory.createCsvDecoder(csvSource),
                         SinkEncoderFactory.createKvEncoder(kvSink));
-        // case3: from_unixtime(44, 'MMdd-yyyy')
+        // case3: from_unix_time(44, 'MMdd-yyyy')
         List<String> output3 = processor3.transform("can|apple|cloud|44|1|3", 
new HashMap<>());
         Assert.assertEquals(1, output3.size());
         Assert.assertEquals(output3.get(0), "result=0101-1970");
 
-        String transformSql4 = "select from_unixtime(numeric1, 'yyyyMMddHHss') 
from source";
+        String transformSql4 = "select from_unix_time(numeric1, 
'yyyyMMddHHss') from source";
         TransformConfig config4 = new TransformConfig(transformSql4);
         TransformProcessor<String, String> processor4 = TransformProcessor
                 .create(config4, 
SourceDecoderFactory.createCsvDecoder(csvSource),
                         SinkEncoderFactory.createKvEncoder(kvSink));
-        // case4: from_unixtime(44, 'yyyyMMddHHss')
+        // case4: from_unix_time(44, 'yyyyMMddHHss')
         List<String> output4 = processor4.transform("can|apple|cloud|44|1|3", 
new HashMap<>());
         Assert.assertEquals(1, output4.size());
         Assert.assertEquals(output4.get(0), "result=197001010844");
@@ -380,7 +380,7 @@ public class TestTransformTemporalFunctionsProcessor {
 
     @Test
     public void testLocalTimeFunction() throws Exception {
-        String transformSql1 = "select localTime() from source";
+        String transformSql1 = "select localtime() from source";
         TransformConfig config1 = new TransformConfig(transformSql1);
         TransformProcessor<String, String> processor1 = TransformProcessor
                 .create(config1, 
SourceDecoderFactory.createCsvDecoder(csvSource),
@@ -395,7 +395,7 @@ public class TestTransformTemporalFunctionsProcessor {
         Assert.assertTrue(duration1.getSeconds() < 1);
 
         // case2: currentTime("UTC")
-        String transformSql2 = "select currentTime('UTC') from source";
+        String transformSql2 = "select current_time('UTC') from source";
         TransformConfig config2 = new TransformConfig(transformSql2);
         TransformProcessor<String, String> processor2 = TransformProcessor
                 .create(config2, 
SourceDecoderFactory.createCsvDecoder(csvSource),
@@ -408,7 +408,7 @@ public class TestTransformTemporalFunctionsProcessor {
         Assert.assertTrue(duration2.getSeconds() < 1);
 
         // case 3: localTime("America/New_York")
-        String transformSql3 = "select localTime('America/New_York') from 
source";
+        String transformSql3 = "select localtime('America/New_York') from 
source";
         TransformConfig config3 = new TransformConfig(transformSql3);
         TransformProcessor<String, String> processor3 = TransformProcessor
                 .create(config3, 
SourceDecoderFactory.createCsvDecoder(csvSource),
@@ -423,38 +423,38 @@ public class TestTransformTemporalFunctionsProcessor {
 
     @Test
     public void testTimestampAdd() throws Exception {
-        String transformSql1 = "select timestampadd('day',string2,string1) 
from source";
+        String transformSql1 = "select timestamp_add('day',string2,string1) 
from source";
         TransformConfig config1 = new TransformConfig(transformSql1);
         TransformProcessor<String, String> processor1 = TransformProcessor
                 .create(config1, 
SourceDecoderFactory.createCsvDecoder(csvSource),
                         SinkEncoderFactory.createKvEncoder(kvSink));
-        // case1: timestampadd('day',3,'1970-01-01')
+        // case1: timestamp_add('day',3,'1970-01-01')
         List<String> output1 = processor1.transform("1970-01-01|3", new 
HashMap<>());
         Assert.assertEquals(1, output1.size());
         Assert.assertEquals("result=1970-01-04", output1.get(0));
 
-        // case2: timestampadd('day',-3,'1970-01-01 00:00:44')
+        // case2: timestamp_add('day',-3,'1970-01-01 00:00:44')
         List<String> output2 = processor1.transform("1970-01-01 00:00:44|-3", 
new HashMap<>());
         Assert.assertEquals(1, output2.size());
         Assert.assertEquals("result=1969-12-29 00:00:44", output2.get(0));
 
-        String transformSql2 = "select timestampadd('MINUTE',string2,string1) 
from source";
+        String transformSql2 = "select timestamp_add('MINUTE',string2,string1) 
from source";
         TransformConfig config2 = new TransformConfig(transformSql2);
         TransformProcessor<String, String> processor2 = TransformProcessor
                 .create(config2, 
SourceDecoderFactory.createCsvDecoder(csvSource),
                         SinkEncoderFactory.createKvEncoder(kvSink));
 
-        // case3: timestampadd('MINUTE',3,'1970-01-01 00:00:44')
+        // case3: timestamp_add('MINUTE',3,'1970-01-01 00:00:44')
         List<String> output3 = processor2.transform("1970-01-01 00:00:44|3", 
new HashMap<>());
         Assert.assertEquals(1, output3.size());
         Assert.assertEquals("result=1970-01-01 00:03:44", output3.get(0));
 
-        // case4: timestampadd('MINUTE',-3,'1970-01-01 00:00:44')
+        // case4: timestamp_add('MINUTE',-3,'1970-01-01 00:00:44')
         List<String> output4 = processor2.transform("1970-01-01 00:00:44|-3", 
new HashMap<>());
         Assert.assertEquals(1, output4.size());
         Assert.assertEquals("result=1969-12-31 23:57:44", output4.get(0));
 
-        // case5: timestampadd('MINUTE',-3,'1970-01-01')
+        // case5: timestamp_add('MINUTE',-3,'1970-01-01')
         List<String> output5 = processor2.transform("1970-01-01|-3", new 
HashMap<>());
         Assert.assertEquals(1, output5.size());
         Assert.assertEquals("result=1969-12-31 23:57:00", output5.get(0));

Reply via email to