diff --git a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java index c1e0dafb6693..4492c3f8d2ef 100644 --- a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java +++ b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java @@ -2004,7 +2004,7 @@ public List getPartitions(org.apache.hadoop.hive.ql.metadata.Table ta public boolean isPartitioned(org.apache.hadoop.hive.ql.metadata.Table hmsTable) { if (!Catalogs.hiveCatalog(conf, hmsTable::getProperty) || - hmsTable.getSd().getLocation() == null) { + hmsTable.getSnapshotRef() == null) { return false; } Table table = IcebergTableUtil.getTable(conf, hmsTable.getTTable()); @@ -2122,7 +2122,7 @@ public boolean canPerformMetadataDelete(org.apache.hadoop.hive.ql.metadata.Table @Override public List getPartitionKeys(org.apache.hadoop.hive.ql.metadata.Table hmsTable) { - if (hmsTable.getSd().getLocation() == null) { + if (hmsTable.getSnapshotRef() == null) { return null; } Table icebergTable = IcebergTableUtil.getTable(conf, hmsTable.getTTable()); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnInfo.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnInfo.java index 04ff84422b73..515f0f5cb130 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnInfo.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnInfo.java @@ -54,6 +54,8 @@ public class ColumnInfo implements Serializable { * Indicates whether the column is a virtual column. */ private boolean isVirtualCol; + + private boolean isPartitionCol; private ObjectInspector objectInspector; @@ -117,6 +119,7 @@ public ColumnInfo(String internalName, ObjectInspector objectInspector, boolean this.isVirtualCol = isVirtualCol; this.isHiddenVirtualCol = isHiddenVirtualCol; this.nullable = nullable; + setTypeName(getType().getTypeName()); } @@ -126,6 +129,7 @@ public ColumnInfo(ColumnInfo columnInfo) { this.isSkewedCol = columnInfo.isSkewedCol(); this.tabAlias = columnInfo.getTabAlias(); this.isVirtualCol = columnInfo.getIsVirtualCol(); + this.isPartitionCol = columnInfo.getIsPartitionCol(); this.isHiddenVirtualCol = columnInfo.isHiddenVirtualCol(); this.nullable = columnInfo.nullable; this.setType(columnInfo.getType()); @@ -166,9 +170,13 @@ public String getTabAlias() { } public boolean getIsVirtualCol() { - return isVirtualCol; + return isVirtualCol || isPartitionCol; } + public boolean getIsPartitionCol() { + return isPartitionCol; + } + public boolean isHiddenVirtualCol() { return isHiddenVirtualCol; } @@ -197,6 +205,10 @@ public void setVirtualCol(boolean isVirtualCol) { this.isVirtualCol = isVirtualCol; } + public void setPartitionCol(boolean isPartitionCol) { + this.isPartitionCol = isPartitionCol; + } + public void setHiddenVirtualCol(boolean isHiddenVirtualCol) { this.isHiddenVirtualCol = isHiddenVirtualCol; } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/DummyPartition.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/DummyPartition.java index c03ecc2ff27f..97b7a9aa1b35 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/DummyPartition.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/DummyPartition.java @@ -18,11 +18,13 @@ package org.apache.hadoop.hive.ql.metadata; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; import com.google.common.collect.Maps; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.hadoop.hive.metastore.api.FieldSchema; /** @@ -34,10 +36,6 @@ */ public class DummyPartition extends Partition { - @SuppressWarnings("nls") - private static final Logger LOG = LoggerFactory - .getLogger("hive.ql.metadata.DummyPartition"); - private String name; private LinkedHashMap partSpec; public DummyPartition() { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java index ff865d1fed9c..efac26224f67 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java @@ -528,7 +528,7 @@ public static void setupNeededColumns(TableScanOperator scanOp, RowSchema inputR continue; } referencedColumnNames.add(column); - if (colInfo.getIsVirtualCol()) { + if (colInfo.getIsVirtualCol() && !colInfo.getIsPartitionCol()) { // part is also a virtual column, but part col should not in this // list. for (int j = 0; j < virtualCols.size(); j++) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 7b1539a2a4fb..13590cd2cf25 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -11963,7 +11963,7 @@ private Operator genTablePlan(String alias, QB qb) throws SemanticException { TypeInfoUtils.getTypeInfoFromObjectInspector(fields.get(i) .getFieldObjectInspector()), alias, false); if (partCols.contains(colInfo.getInternalName())) { - colInfo.setVirtualCol(true); + colInfo.setPartitionCol(true); } colInfo.setSkewedCol(isSkewedCol(alias, qb, fields.get(i).getFieldName())); rwsch.put(alias, fields.get(i).getFieldName(), colInfo);