This is an automated email from the ASF dual-hosted git repository.
zhouyao2023 pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new 96fdade760 [Feature][Transforms] Support is_date function of sql
(#6966)
96fdade760 is described below
commit 96fdade76078dc3ff4855708d7af786ad822d789
Author: hailin0 <[email protected]>
AuthorDate: Wed Jun 12 09:43:28 2024 +0800
[Feature][Transforms] Support is_date function of sql (#6966)
---
docs/en/transform-v2/sql-functions.md | 9 +++++++++
.../src/test/resources/sql_transform/func_datetime.conf | 12 ++++++++++--
.../apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java | 3 +++
.../org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java | 1 +
.../transform/sql/zeta/functions/DateTimeFunction.java | 9 +++++++++
5 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/docs/en/transform-v2/sql-functions.md
b/docs/en/transform-v2/sql-functions.md
index ab98c2d2bf..e1c541ef1c 100644
--- a/docs/en/transform-v2/sql-functions.md
+++ b/docs/en/transform-v2/sql-functions.md
@@ -795,6 +795,15 @@ Example:
MONTHNAME(CREATED)
+### IS_DATE
+
+```IS_DATE(string, formatString)```
+Parses a string and returns a boolean value. The most important format
characters are: y year, M month, d day, H hour, m minute, s second. For details
of the format, see java.time.format.DateTimeFormatter.
+
+Example:
+
+CALL IS_DATE('2021-04-08 13:34:45','yyyy-MM-dd HH:mm:ss')
+
### PARSEDATETIME / TO_DATE
```PARSEDATETIME | TO_DATE(string, formatString)```
diff --git
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_datetime.conf
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_datetime.conf
index 042b66ad25..05f8f7935f 100644
---
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_datetime.conf
+++
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_datetime.conf
@@ -37,10 +37,11 @@ source {
c4 = "timestamp"
c5 = "string"
c6 = "string"
+ c7 = "string"
}
}
rows = [
- {fields = [1, "Joy Ding", "2021-04-15T13:34:45", "2022-01-23T12:34:56",
"2021-04-15T13:34:45.235", "2021-04-08T13:34:45.235", "2021-04-08
13:34:45.235", "2021-04-08"], kind = INSERT}
+ {fields = [1, "Joy Ding", "2021-04-15T13:34:45", "2022-01-23T12:34:56",
"2021-04-15T13:34:45.235", "2021-04-08T13:34:45.235", "2021-04-08
13:34:45.235", "2021-04-08", "2021-04-08 13:34:45.235"], kind = INSERT}
]
}
}
@@ -49,7 +50,7 @@ transform {
Sql {
source_table_name = "fake"
result_table_name = "fake1"
- query = "select current_date as cd, current_timestamp as ct2, dateadd(c1,
1) as c1_1, dateadd(c1, 40, 'DAY') as c1_2, dateadd(c1, 2, 'YEAR') as c1_3,
dateadd(c1, 10, 'MONTH') as c1_4, dateadd(c1, 13, 'HOUR') as c1_5, dateadd(c1,
40, 'MINUTE') as c1_6, dateadd(c1, 30, 'SECOND') as c1_7, datediff(c1, c2) as
test, datediff(c1, c2, 'DAY') as c2_1, datediff(c1, c2, 'YEAR') as c2_2,
datediff(c1, c2, 'MONTH') as c2_3, datediff(c1, c2, 'HOUR') as c2_4,
datediff(c1, c2, 'MINUTE') as c2_5, dat [...]
+ query = "select current_date as cd, current_timestamp as ct2, dateadd(c1,
1) as c1_1, dateadd(c1, 40, 'DAY') as c1_2, dateadd(c1, 2, 'YEAR') as c1_3,
dateadd(c1, 10, 'MONTH') as c1_4, dateadd(c1, 13, 'HOUR') as c1_5, dateadd(c1,
40, 'MINUTE') as c1_6, dateadd(c1, 30, 'SECOND') as c1_7, datediff(c1, c2) as
test, datediff(c1, c2, 'DAY') as c2_1, datediff(c1, c2, 'YEAR') as c2_2,
datediff(c1, c2, 'MONTH') as c2_3, datediff(c1, c2, 'HOUR') as c2_4,
datediff(c1, c2, 'MINUTE') as c2_5, dat [...]
}
}
@@ -387,6 +388,13 @@ sink {
field_value = [
{equals_to = 2021}
]
+ },
+ {
+ field_name = "c7_1"
+ field_type = "timestamp"
+ field_value = [
+ {equals_to = "2021-04-08T13:34:45.235"}
+ ]
}
]
}
diff --git
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java
index 7a8b83d4db..44b9ca20b7 100644
---
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java
+++
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java
@@ -159,6 +159,7 @@ public class ZetaSQLFunction {
public static final String MONTHNAME = "MONTHNAME";
public static final String PARSEDATETIME = "PARSEDATETIME";
public static final String TO_DATE = "TO_DATE";
+ public static final String IS_DATE = "IS_DATE";
public static final String QUARTER = "QUARTER";
public static final String SECOND = "SECOND";
public static final String WEEK = "WEEK";
@@ -476,6 +477,8 @@ public class ZetaSQLFunction {
case PARSEDATETIME:
case TO_DATE:
return DateTimeFunction.parsedatetime(args);
+ case IS_DATE:
+ return DateTimeFunction.isDate(args);
case QUARTER:
return DateTimeFunction.quarter(args);
case SECOND:
diff --git
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java
index 64ad04ee3e..934cd88308 100644
---
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java
+++
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java
@@ -391,6 +391,7 @@ public class ZetaSQLType {
case ZetaSQLFunction.DATEDIFF:
return BasicType.LONG_TYPE;
case ZetaSQLFunction.REGEXP_LIKE:
+ case ZetaSQLFunction.IS_DATE:
return BasicType.BOOLEAN_TYPE;
case ZetaSQLFunction.ACOS:
case ZetaSQLFunction.ASIN:
diff --git
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/DateTimeFunction.java
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/DateTimeFunction.java
index 2bd8fa2814..1fa459e4bf 100644
---
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/DateTimeFunction.java
+++
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/DateTimeFunction.java
@@ -472,6 +472,15 @@ public class DateTimeFunction {
return getMonthsAndWeeks(0)[dow - 1];
}
+ public static boolean isDate(List<Object> args) {
+ try {
+ parsedatetime(args);
+ return true;
+ } catch (Throwable e) {
+ return false;
+ }
+ }
+
public static Temporal parsedatetime(List<Object> args) {
String str = (String) args.get(0);
if (str == null) {