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 25b8a02b76 [Bug] [connector-file] When the data source field is less 
than the target (Hive) field,it will throw null pointer exception#8150 (#8200)
25b8a02b76 is described below

commit 25b8a02b76d9789816f2881615ac43ef29becfee
Author: linjianchang <131222468+linjianch...@users.noreply.github.com>
AuthorDate: Sat Jan 4 16:16:06 2025 +0800

    [Bug] [connector-file] When the data source field is less than the target 
(Hive) field,it will throw null pointer exception#8150 (#8200)
---
 .../seatunnel/file/sink/config/FileSinkConfig.java |  1 +
 .../seatunnel/file/writer/FileSinkConfigTest.java  | 20 +++++++++++++++++
 .../src/test/resources/test_write_hive.conf        | 25 ++++++++++++++++++++++
 3 files changed, 46 insertions(+)

diff --git 
a/seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/sink/config/FileSinkConfig.java
 
b/seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/sink/config/FileSinkConfig.java
index 577b62defb..d9315a6f5c 100644
--- 
a/seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/sink/config/FileSinkConfig.java
+++ 
b/seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/sink/config/FileSinkConfig.java
@@ -187,6 +187,7 @@ public class FileSinkConfig extends BaseFileSinkConfig 
implements PartitionConfi
         this.sinkColumnsIndexInRow =
                 this.sinkColumnList.stream()
                         .map(column -> columnsMap.get(column.toLowerCase()))
+                        .filter(e -> e != null)
                         .collect(Collectors.toList());
 
         if (!CollectionUtils.isEmpty(this.partitionFieldList)) {
diff --git 
a/seatunnel-connectors-v2/connector-file/connector-file-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/file/writer/FileSinkConfigTest.java
 
b/seatunnel-connectors-v2/connector-file/connector-file-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/file/writer/FileSinkConfigTest.java
index 3b12aad0ec..0197cda01f 100644
--- 
a/seatunnel-connectors-v2/connector-file/connector-file-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/file/writer/FileSinkConfigTest.java
+++ 
b/seatunnel-connectors-v2/connector-file/connector-file-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/file/writer/FileSinkConfigTest.java
@@ -31,6 +31,7 @@ import org.junit.jupiter.api.Test;
 import java.io.File;
 import java.net.URL;
 import java.nio.file.Paths;
+import java.util.List;
 
 public class FileSinkConfigTest {
 
@@ -47,4 +48,23 @@ public class FileSinkConfigTest {
                         new SeaTunnelDataType[] {BasicType.STRING_TYPE, 
BasicType.STRING_TYPE});
         Assertions.assertDoesNotThrow(() -> new FileSinkConfig(config, 
rowType));
     }
+
+    @Test
+    public void testSinkColumnsGreaterThanSource() throws Exception {
+        URL conf = 
OrcReadStrategyTest.class.getResource("/test_write_hive.conf");
+        Assertions.assertNotNull(conf);
+        String confPath = Paths.get(conf.toURI()).toString();
+        Config config = ConfigFactory.parseFile(new File(confPath));
+
+        SeaTunnelRowType seaTunnelRowTypeInfo =
+                new SeaTunnelRowType(
+                        new String[] {"name", "age", "address"},
+                        new SeaTunnelDataType[] {
+                            BasicType.STRING_TYPE, BasicType.INT_TYPE, 
BasicType.STRING_TYPE
+                        });
+        FileSinkConfig fileSinkConfig = new FileSinkConfig(config, 
seaTunnelRowTypeInfo);
+        List<Integer> sinkColumnsIndexInRow = 
fileSinkConfig.getSinkColumnsIndexInRow();
+        Assertions.assertEquals(
+                sinkColumnsIndexInRow.size(), 
seaTunnelRowTypeInfo.getFieldNames().length);
+    }
 }
diff --git 
a/seatunnel-connectors-v2/connector-file/connector-file-base/src/test/resources/test_write_hive.conf
 
b/seatunnel-connectors-v2/connector-file/connector-file-base/src/test/resources/test_write_hive.conf
new file mode 100644
index 0000000000..fcb9db149d
--- /dev/null
+++ 
b/seatunnel-connectors-v2/connector-file/connector-file-base/src/test/resources/test_write_hive.conf
@@ -0,0 +1,25 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+{
+      fs.defaultFS = "hdfs://hadoop01:9000"
+      path = "/data/test"
+      file_format_type = "json"
+      batch_size=10
+      sink_columns=[name,age,address,weight,height]
+}
+

Reply via email to