This is an automated email from the ASF dual-hosted git repository.

lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new 4009edea7 [parquet] Parquet write supports complex types in complex 
type field
4009edea7 is described below

commit 4009edea7b333e240e8b9a5e6ffa9d7bd587b600
Author: Jingsong <[email protected]>
AuthorDate: Tue Jun 11 15:37:53 2024 +0800

    [parquet] Parquet write supports complex types in complex type field
---
 .../parquet/writer/ParquetRowDataWriter.java       | 34 +++++++++++++++-------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git 
a/paimon-format/src/main/java/org/apache/paimon/format/parquet/writer/ParquetRowDataWriter.java
 
b/paimon-format/src/main/java/org/apache/paimon/format/parquet/writer/ParquetRowDataWriter.java
index 6312ed051..ae71b5dad 100644
--- 
a/paimon-format/src/main/java/org/apache/paimon/format/parquet/writer/ParquetRowDataWriter.java
+++ 
b/paimon-format/src/main/java/org/apache/paimon/format/parquet/writer/ParquetRowDataWriter.java
@@ -404,9 +404,16 @@ public class ParquetRowDataWriter {
 
         @Override
         public void write(InternalRow row, int ordinal) {
-            recordConsumer.startGroup();
+            writeMapData(row.getMap(ordinal));
+        }
 
-            InternalMap mapData = row.getMap(ordinal);
+        @Override
+        public void write(InternalArray arrayData, int ordinal) {
+            writeMapData(arrayData.getMap(ordinal));
+        }
+
+        private void writeMapData(InternalMap mapData) {
+            recordConsumer.startGroup();
 
             if (mapData != null && mapData.size() > 0) {
                 recordConsumer.startField(repeatedGroupName, 0);
@@ -435,9 +442,6 @@ public class ParquetRowDataWriter {
             }
             recordConsumer.endGroup();
         }
-
-        @Override
-        public void write(InternalArray arrayData, int ordinal) {}
     }
 
     /** It writes an array type field to parquet. */
@@ -461,8 +465,16 @@ public class ParquetRowDataWriter {
 
         @Override
         public void write(InternalRow row, int ordinal) {
+            writeArrayData(row.getArray(ordinal));
+        }
+
+        @Override
+        public void write(InternalArray arrayData, int ordinal) {
+            writeArrayData(arrayData.getArray(ordinal));
+        }
+
+        private void writeArrayData(InternalArray arrayData) {
             recordConsumer.startGroup();
-            InternalArray arrayData = row.getArray(ordinal);
             int listLength = arrayData.size();
 
             if (listLength > 0) {
@@ -481,9 +493,6 @@ public class ParquetRowDataWriter {
             }
             recordConsumer.endGroup();
         }
-
-        @Override
-        public void write(InternalArray arrayData, int ordinal) {}
     }
 
     /** It writes a row type field to parquet. */
@@ -522,7 +531,12 @@ public class ParquetRowDataWriter {
         }
 
         @Override
-        public void write(InternalArray arrayData, int ordinal) {}
+        public void write(InternalArray arrayData, int ordinal) {
+            recordConsumer.startGroup();
+            InternalRow rowData = arrayData.getRow(ordinal, 
fieldWriters.length);
+            write(rowData);
+            recordConsumer.endGroup();
+        }
     }
 
     private Binary timestampToInt96(Timestamp timestamp) {

Reply via email to