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;