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 <[email protected]>
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:
[email protected] 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));