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 41b8530028 [Improve][Transform] Improve inner sql query for map field 
type (#7718)
41b8530028 is described below

commit 41b85300280342b8b45ffcb779e8c81a88babb69
Author: Jarvis <[email protected]>
AuthorDate: Fri Sep 27 09:41:33 2024 +0800

    [Improve][Transform] Improve inner sql query for map field type (#7718)
---
 .../src/test/resources/sql_transform/inner_query.conf        | 12 +++++++++++-
 .../org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java | 11 +++++++----
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git 
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/inner_query.conf
 
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/inner_query.conf
index 65a6324f94..3edd006fea 100644
--- 
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/inner_query.conf
+++ 
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/inner_query.conf
@@ -53,6 +53,7 @@ transform {
         c_row.c_string c_string,
         c_row.c_inner_row.c_inner_string c_inner_string,
         c_row.c_inner_row.c_inner_timestamp c_inner_timestamp,
+        c_row.c_inner_row.c_map inner_map,
         c_row.c_inner_row.c_map.innerQuery map_val,
         c_row.c_inner_row.c_map.notExistKey map_not_exist_val
         from fake"""
@@ -94,11 +95,20 @@ sink {
             {rule_type = NOT_NULL}
           ]
         },
+        {
+          field_name = "inner_map"
+          field_type = "map<string, string>"
+          field_value = [
+            {
+              equals_to = {innerQuery=innerQuery}
+            }
+          ]
+        },
         {
           field_name = "map_val"
           field_type = "string"
           field_value = [
-            {rule_type = NOT_NULL}
+            {equals_to = "innerQuery"}
           ]
         },
         {
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 9b527ae8c2..bf3211d0d4 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
@@ -144,12 +144,15 @@ public class ZetaSQLType {
                     if (filedTypeRes instanceof SeaTunnelRowType) {
                         parRowType = (SeaTunnelRowType) filedTypeRes;
                     } else if (filedTypeRes instanceof MapType) {
-                        //  for map type. only support it's the latest struct.
-                        if (i != deep - 2) {
+                        if (i < deep - 2) {
                             throw new IllegalArgumentException(
-                                    "For now, we only support map struct is 
the latest struct in inner query function! Please modify your query!");
+                                    "For now, when you query map field with 
inner query, it must be latest field or latest struct field! Please modify your 
query!");
+                        }
+                        if (i == deep - 1) {
+                            return filedTypeRes;
+                        } else {
+                            return ((MapType<?, ?>) 
filedTypeRes).getValueType();
                         }
-                        return ((MapType<?, ?>) filedTypeRes).getValueType();
                     }
                 }
                 return filedTypeRes;

Reply via email to