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:

Reply via email to