This is an automated email from the ASF dual-hosted git repository.
wanghailin 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 15431c94d9 [Feature][Transform-SQL]Support sql transform to generate
UUID (#7881)
15431c94d9 is described below
commit 15431c94d9b9f34839173d67c1b638f058f58722
Author: Zhilin Li <[email protected]>
AuthorDate: Wed Oct 23 20:05:13 2024 +0800
[Feature][Transform-SQL]Support sql transform to generate UUID (#7881)
---
docs/en/transform-v2/sql-functions.md | 11 +++++++++++
docs/zh/transform-v2/sql-functions.md | 11 +++++++++++
.../src/test/resources/sql_transform/func_string.conf | 11 ++++++++++-
.../apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java | 6 ++++++
.../org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java | 1 +
5 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/docs/en/transform-v2/sql-functions.md
b/docs/en/transform-v2/sql-functions.md
index 3438a24de9..ce01df937f 100644
--- a/docs/en/transform-v2/sql-functions.md
+++ b/docs/en/transform-v2/sql-functions.md
@@ -973,3 +973,14 @@ It is used to determine whether the condition is valid and
return different valu
Example:
case when c_string in ('c_string') then 1 else 0 end
+
+### UUID
+
+```UUID()```
+
+Generate a uuid through java function.
+
+Example:
+
+select UUID() as seatunnel_uuid
+
diff --git a/docs/zh/transform-v2/sql-functions.md
b/docs/zh/transform-v2/sql-functions.md
index 57c440a39b..13dc3a9bc5 100644
--- a/docs/zh/transform-v2/sql-functions.md
+++ b/docs/zh/transform-v2/sql-functions.md
@@ -964,3 +964,14 @@ from
示例:
case when c_string in ('c_string') then 1 else 0 end
+
+### UUID
+
+```UUID()```
+
+通过java函数生成uuid
+
+示例:
+
+select UUID() as seatunnel_uuid
+
diff --git
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_string.conf
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_string.conf
index ebeea3659c..90999c6bf4 100644
---
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_string.conf
+++
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_string.conf
@@ -54,7 +54,7 @@ transform {
sql {
source_table_name = "fake"
result_table_name = "fake1"
- query = "select ascii(c1) as c1_1, ascii(c2) as c2_1, bit_length(c4) as
c4_1, length(c4) as c4_2, octet_length(c4) as c4_3, char(c5) as c5_1,
concat(c1,id,'!') as c1_2, hextoraw(c6) as c6_1, rawtohex(c7) as c7_1,
insert(name,2,2,'**') as name1, lower(name) as name2, upper(name) as name3,
left(name, 3) as name4, right(name, 4) as name5, lpad(name, 10, '*') as name6,
rpad(name, 10, '*') as name7, ltrim(c8, '*') as c8_1, rtrim(c8, '*') as c8_2,
trim(c8, '*') as c8_3, regexp_replace(c9, [...]
+ query = "select ascii(c1) as c1_1, ascii(c2) as c2_1, bit_length(c4) as
c4_1, length(c4) as c4_2, octet_length(c4) as c4_3, char(c5) as c5_1,
concat(c1,id,'!') as c1_2, hextoraw(c6) as c6_1, rawtohex(c7) as c7_1,
insert(name,2,2,'**') as name1, lower(name) as name2, upper(name) as name3,
left(name, 3) as name4, right(name, 4) as name5, lpad(name, 10, '*') as name6,
rpad(name, 10, '*') as name7, ltrim(c8, '*') as c8_1, rtrim(c8, '*') as c8_2,
trim(c8, '*') as c8_3, regexp_replace(c9, [...]
}
}
@@ -286,6 +286,15 @@ sink {
field_value = [
{equals_to = "Joy Ding"}
]
+ },
+ {
+ field_name = uuid
+ field_type = STRING
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ }
+ ]
}
]
}
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 a6221e4a27..ce02832712 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
@@ -61,6 +61,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import static java.util.UUID.randomUUID;
+
public class ZetaSQLFunction {
// ============================internal functions=====================
@@ -171,6 +173,8 @@ public class ZetaSQLFunction {
public static final String IFNULL = "IFNULL";
public static final String NULLIF = "NULLIF";
+ public static final String UUID = "UUID";
+
private final SeaTunnelRowType inputRowType;
private final ZetaSQLType zetaSQLType;
private final ZetaSQLFilter zetaSQLFilter;
@@ -515,6 +519,8 @@ public class ZetaSQLFunction {
return SystemFunction.ifnull(args);
case NULLIF:
return SystemFunction.nullif(args);
+ case UUID:
+ return randomUUID().toString();
default:
for (ZetaUDF udf : udfList) {
if (udf.functionName().equalsIgnoreCase(functionName)) {
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 bf3211d0d4..3d9715561c 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
@@ -384,6 +384,7 @@ public class ZetaSQLType {
case ZetaSQLFunction.MONTHNAME:
case ZetaSQLFunction.FORMATDATETIME:
case ZetaSQLFunction.FROM_UNIXTIME:
+ case ZetaSQLFunction.UUID:
return BasicType.STRING_TYPE;
case ZetaSQLFunction.ASCII:
case ZetaSQLFunction.LOCATE: