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

yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new e2814381b1d branch-4.0: [fix](maxcompute)fix maxcompute push down 
predicates null pointer. #57474 (#57568)
e2814381b1d is described below

commit e2814381b1de676ae9216cfdf3186c44c82857e1
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Nov 3 12:01:55 2025 +0800

    branch-4.0: [fix](maxcompute)fix maxcompute push down predicates null 
pointer. #57474 (#57568)
    
    Cherry-picked from #57474
    
    Co-authored-by: daidai <[email protected]>
---
 .../doris/datasource/maxcompute/MaxComputeExternalTable.java  | 11 ++++++-----
 .../datasource/maxcompute/MaxComputeSchemaCacheValue.java     |  9 ++++++++-
 .../datasource/maxcompute/source/MaxComputeScanNode.java      | 10 ++++++++++
 3 files changed, 24 insertions(+), 6 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeExternalTable.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeExternalTable.java
index d9d167e786b..09f052f2cea 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeExternalTable.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeExternalTable.java
@@ -66,8 +66,6 @@ public class MaxComputeExternalTable extends ExternalTable {
         super(id, name, remoteName, catalog, db, 
TableType.MAX_COMPUTE_EXTERNAL_TABLE);
     }
 
-    private Map<String, com.aliyun.odps.Column> columnNameToOdpsColumn = new 
HashMap();
-
     @Override
     protected synchronized void makeSureInitialized() {
         super.makeSureInitialized();
@@ -166,7 +164,10 @@ public class MaxComputeExternalTable extends ExternalTable 
{
     }
 
     public Map<String, com.aliyun.odps.Column> getColumnNameToOdpsColumn() {
-        return columnNameToOdpsColumn;
+        makeSureInitialized();
+        Optional<SchemaCacheValue> schemaCacheValue = getSchemaCacheValue();
+        return schemaCacheValue.map(value -> ((MaxComputeSchemaCacheValue) 
value).getColumnNameToOdpsColumn())
+                .orElse(Collections.emptyMap());
     }
 
     @Override
@@ -179,7 +180,7 @@ public class MaxComputeExternalTable extends ExternalTable {
         TableIdentifier tableIdentifier = 
mcCatalog.getOdpsTableIdentifier(dbName, name);
 
         List<com.aliyun.odps.Column> columns = 
odpsTable.getSchema().getColumns();
-
+        Map<String, com.aliyun.odps.Column> columnNameToOdpsColumn = new 
HashMap<>();
         for (com.aliyun.odps.Column column : columns) {
             columnNameToOdpsColumn.put(column.getName(), column);
         }
@@ -218,7 +219,7 @@ public class MaxComputeExternalTable extends ExternalTable {
         }
 
         return Optional.of(new MaxComputeSchemaCacheValue(schema, odpsTable, 
tableIdentifier,
-                partitionColumnNames, partitionSpecs, partitionDorisColumns, 
partitionTypes));
+                partitionColumnNames, partitionSpecs, partitionDorisColumns, 
partitionTypes, columnNameToOdpsColumn));
     }
 
     private Type mcTypeToDorisType(TypeInfo typeInfo) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeSchemaCacheValue.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeSchemaCacheValue.java
index cf87725c680..cd734985e6e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeSchemaCacheValue.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeSchemaCacheValue.java
@@ -27,6 +27,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.util.List;
+import java.util.Map;
 
 @Getter
 @Setter
@@ -37,10 +38,11 @@ public class MaxComputeSchemaCacheValue extends 
SchemaCacheValue {
     private List<String> partitionSpecs;
     private List<Column> partitionColumns;
     private List<Type> partitionTypes;
+    private Map<String, com.aliyun.odps.Column> columnNameToOdpsColumn;
 
     public MaxComputeSchemaCacheValue(List<Column> schema, Table odpsTable, 
TableIdentifier tableIdentifier,
             List<String> partitionColumnNames, List<String> partitionSpecs, 
List<Column> partitionColumns,
-            List<Type> partitionTypes) {
+            List<Type> partitionTypes, Map<String, com.aliyun.odps.Column> 
columnNameToOdpsColumn) {
         super(schema);
         this.odpsTable = odpsTable;
         this.tableIdentifier = tableIdentifier;
@@ -48,6 +50,7 @@ public class MaxComputeSchemaCacheValue extends 
SchemaCacheValue {
         this.partitionColumnNames = partitionColumnNames;
         this.partitionColumns = partitionColumns;
         this.partitionTypes = partitionTypes;
+        this.columnNameToOdpsColumn = columnNameToOdpsColumn;
     }
 
     public List<Column> getPartitionColumns() {
@@ -57,4 +60,8 @@ public class MaxComputeSchemaCacheValue extends 
SchemaCacheValue {
     public List<String> getPartitionColumnNames() {
         return partitionColumnNames;
     }
+
+    public Map<String, com.aliyun.odps.Column> getColumnNameToOdpsColumn() {
+        return columnNameToOdpsColumn;
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/source/MaxComputeScanNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/source/MaxComputeScanNode.java
index e923b600d23..dc6ced6ee01 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/source/MaxComputeScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/source/MaxComputeScanNode.java
@@ -62,6 +62,8 @@ import com.aliyun.odps.table.read.split.InputSplitAssigner;
 import com.aliyun.odps.table.read.split.impl.IndexedInputSplit;
 import jline.internal.Log;
 import lombok.Setter;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -88,6 +90,8 @@ public class MaxComputeScanNode extends FileQueryScanNode {
     static final DateTimeFormatter dateTime3Formatter = 
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
     static final DateTimeFormatter dateTime6Formatter = 
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
 
+    private static final Logger LOG = 
LogManager.getLogger(MaxComputeScanNode.class);
+
     private final MaxComputeExternalTable table;
     private Predicate filterPredicate;
     List<String> requiredPartitionColumns = new ArrayList<>();
@@ -355,6 +359,9 @@ public class MaxComputeScanNode extends FileQueryScanNode {
 
             String columnName = convertSlotRefToColumnName(expr.getChild(0));
             if (!table.getColumnNameToOdpsColumn().containsKey(columnName)) {
+                Map<String, com.aliyun.odps.Column> columnMap = 
table.getColumnNameToOdpsColumn();
+                LOG.warn("ColumnNameToOdpsColumn size=" + columnMap.size()
+                        + ", keys=[" + String.join(", ", columnMap.keySet()) + 
"]");
                 throw new AnalysisException("Column " + columnName + " not 
found in table, can not push "
                         + "down predicate to MaxCompute " + table.getName());
             }
@@ -415,6 +422,9 @@ public class MaxComputeScanNode extends FileQueryScanNode {
             if (odpsOp != null) {
                 String columnName = 
convertSlotRefToColumnName(expr.getChild(0));
                 if 
(!table.getColumnNameToOdpsColumn().containsKey(columnName)) {
+                    Map<String, com.aliyun.odps.Column> columnMap = 
table.getColumnNameToOdpsColumn();
+                    LOG.warn("ColumnNameToOdpsColumn size=" + columnMap.size()
+                            + ", keys=[" + String.join(", ", 
columnMap.keySet()) + "]");
                     throw new AnalysisException("Column " + columnName + " not 
found in table, can not push "
                             + "down predicate to MaxCompute " + 
table.getName());
                 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to