This is an automated email from the ASF dual-hosted git repository.
aloyszhang 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 2409da5c66 [INLONG-10930][SDK] Transform support DAYOFWEEK function
(#10933)
2409da5c66 is described below
commit 2409da5c66897210f38cf1b7e88579501528f7bf
Author: Xincheng Huang <[email protected]>
AuthorDate: Wed Aug 28 17:08:14 2024 +0800
[INLONG-10930][SDK] Transform support DAYOFWEEK function (#10933)
---
.../sdk/transform/process/function/DateExtractFunction.java | 6 +++++-
.../inlong/sdk/transform/process/operator/OperatorTools.java | 1 +
.../process/TestTransformTemporalFunctionsProcessor.java | 10 ++++++++++
3 files changed, 16 insertions(+), 1 deletion(-)
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 d763b657e2..896b67c31a 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
@@ -41,6 +41,7 @@ import java.util.Locale;
* - week(date)--returns the week of a year (an integer between 1 and 53) from
SQL date
* - dayofyear(date)--returns the day of a year (an integer between 1 and 366)
from SQL date
* - 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 {
@@ -49,7 +50,7 @@ public class DateExtractFunction implements ValueParser {
private static final TemporalField weekOfYearField =
WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear();
public enum DateExtractFunctionType {
- YEAR, QUARTER, MONTH, WEEK, DAY_OF_YEAR, DAY_OF_MONTH
+ YEAR, QUARTER, MONTH, WEEK, DAY_OF_YEAR, DAY_OF_MONTH, DAY_OF_WEEK
}
public DateExtractFunction(DateExtractFunctionType type, Function expr) {
@@ -82,6 +83,9 @@ public class DateExtractFunction implements ValueParser {
// dayofmonth(between 1 and 31)
case DAY_OF_MONTH:
return localDate.getDayOfMonth();
+ // dayofweek(between 1 and 7)
+ case DAY_OF_WEEK:
+ return localDate.getDayOfWeek().getValue() % 7 + 1;
default:
return null;
}
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 e4bfb2cf62..eb39599b47 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
@@ -158,6 +158,7 @@ public class OperatorTools {
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",
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 6ccfc357b3..8c99b2a6bd 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
@@ -205,6 +205,16 @@ public class TestTransformTemporalFunctionsProcessor {
List<String> output6 = processor6.transform("2024-02-29", new
HashMap<>());
Assert.assertEquals(1, output6.size());
Assert.assertEquals(output6.get(0), "result=29");
+
+ String transformSql7 = "select dayofweek(string1) from source";
+ TransformConfig config7 = new TransformConfig(transformSql7);
+ TransformProcessor<String, String> processor7 = TransformProcessor
+ .create(config7,
SourceDecoderFactory.createCsvDecoder(csvSource),
+ SinkEncoderFactory.createKvEncoder(kvSink));
+ // case7: dayofweek(2024-02-29) (Thursday)
+ List<String> output7 = processor7.transform("2024-02-29", new
HashMap<>());
+ Assert.assertEquals(1, output7.size());
+ Assert.assertEquals(output7.get(0), "result=5");
}
@Test