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

junhao 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 b7e11d7bd [core] Pass null value to file index (#3766)
b7e11d7bd is described below

commit b7e11d7bd3f0e39e6a769d8cd62c4076b4d8e3e5
Author: YeJunHao <[email protected]>
AuthorDate: Fri Jul 19 10:49:24 2024 +0800

    [core] Pass null value to file index (#3766)
---
 .../java/org/apache/paimon/fileindex/FileIndexWriter.java  |  6 ++----
 .../paimon/fileindex/bloomfilter/BloomFilterFileIndex.java |  4 +++-
 .../java/org/apache/paimon/io/DataFileIndexWriter.java     | 14 ++++++++++++++
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git 
a/paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexWriter.java 
b/paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexWriter.java
index 57b583f9b..cfb05d20d 100644
--- 
a/paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexWriter.java
+++ 
b/paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexWriter.java
@@ -24,10 +24,8 @@ public abstract class FileIndexWriter {
     private boolean empty = true;
 
     public void writeRecord(Object key) {
-        if (key != null) {
-            empty = false;
-            write(key);
-        }
+        empty = false;
+        write(key);
     }
 
     public abstract void write(Object key);
diff --git 
a/paimon-common/src/main/java/org/apache/paimon/fileindex/bloomfilter/BloomFilterFileIndex.java
 
b/paimon-common/src/main/java/org/apache/paimon/fileindex/bloomfilter/BloomFilterFileIndex.java
index 690ba7b6f..ce7827a98 100644
--- 
a/paimon-common/src/main/java/org/apache/paimon/fileindex/bloomfilter/BloomFilterFileIndex.java
+++ 
b/paimon-common/src/main/java/org/apache/paimon/fileindex/bloomfilter/BloomFilterFileIndex.java
@@ -92,7 +92,9 @@ public class BloomFilterFileIndex implements FileIndexer {
 
         @Override
         public void write(Object key) {
-            filter.addHash(hashFunction.hash(key));
+            if (key != null) {
+                filter.addHash(hashFunction.hash(key));
+            }
         }
 
         @Override
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/io/DataFileIndexWriter.java 
b/paimon-core/src/main/java/org/apache/paimon/io/DataFileIndexWriter.java
index 83d0cf078..71ff6b7ba 100644
--- a/paimon-core/src/main/java/org/apache/paimon/io/DataFileIndexWriter.java
+++ b/paimon-core/src/main/java/org/apache/paimon/io/DataFileIndexWriter.java
@@ -43,8 +43,10 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /** Index file writer for a data file. */
 public final class DataFileIndexWriter implements Closeable {
@@ -303,18 +305,30 @@ public final class DataFileIndexWriter implements 
Closeable {
         }
 
         public void write(InternalRow row) {
+            if (row.isNullAt(position)) {
+                indexWritersMap.values().forEach(write -> 
write.writeRecord(null));
+                return;
+            }
             InternalMap internalMap = row.getMap(position);
             InternalArray keyArray = internalMap.keyArray();
             InternalArray valueArray = internalMap.valueArray();
 
+            Set<String> writedKeys = new HashSet<>();
             for (int i = 0; i < keyArray.size(); i++) {
                 String key = keyArray.getString(i).toString();
                 org.apache.paimon.fileindex.FileIndexWriter writer =
                         indexWritersMap.getOrDefault(key, null);
                 if (writer != null) {
+                    writedKeys.add(key);
                     
writer.writeRecord(valueElementGetter.getElementOrNull(valueArray, i));
                 }
             }
+
+            for (Map.Entry<String, FileIndexWriter> writerEntry : 
indexWritersMap.entrySet()) {
+                if (!writedKeys.contains(writerEntry.getKey())) {
+                    writerEntry.getValue().writeRecord(null);
+                }
+            }
         }
 
         public void add(String nestedKey, Options nestedOptions) {

Reply via email to