diff --git a/service/src/java/org/apache/hive/service/cli/operation/GetColumnsOperation.java b/service/src/java/org/apache/hive/service/cli/operation/GetColumnsOperation.java index 92ea7b0..71c0f5c 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/GetColumnsOperation.java +++ b/service/src/java/org/apache/hive/service/cli/operation/GetColumnsOperation.java @@ -20,10 +20,13 @@ import java.sql.DatabaseMetaData; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.regex.Pattern; import org.apache.hadoop.hive.metastore.IMetaStoreClient; +import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.metastore.api.Table; import org.apache.hive.service.cli.ColumnDescriptor; import org.apache.hive.service.cli.FetchOrientation; @@ -95,7 +98,9 @@ "Source type of a distinct type or user-generated Ref type, " + "SQL type from java.sql.Types (null if DATA_TYPE isn't DISTINCT or user-generated REF)") .addPrimitiveColumn("IS_AUTO_INCREMENT", Type.STRING_TYPE, - "Indicates whether this column is auto incremented."); + "Indicates whether this column is auto incremented.") + .addPrimitiveColumn("IS_PARTITION_COLUMN", Type.STRING_TYPE, + "Indicates whether this column is a partition column."); private final String catalogName; private final String schemaName; @@ -133,6 +138,7 @@ public void runInternal() throws HiveSQLException { List tableNames = metastoreClient.getTables(dbName, tablePattern); Collections.sort(tableNames); for (Table table : metastoreClient.getTableObjectsByName(dbName, tableNames)) { + Set partitionKeys = getPartitionKeys(table); TableSchema schema = new TableSchema(metastoreClient.getSchema(dbName, table.getTableName())); for (ColumnDescriptor column : schema.getColumnDescriptors()) { if (columnPattern != null && !columnPattern.matcher(column.getName()).matches()) { @@ -162,6 +168,7 @@ public void runInternal() throws HiveSQLException { null, // SCOPE_TABLE null, // SOURCE_DATA_TYPE "NO", // IS_AUTO_INCREMENT + partitionKeys.contains(column.getName()) ? "YES" : "NO" // IS_PARTITION_COLUMN }; rowSet.addRow(rowData); } @@ -174,7 +181,18 @@ public void runInternal() throws HiveSQLException { } } - + + private Set getPartitionKeys(Table table) { + List partitionKeys = table.getPartitionKeys(); + if (partitionKeys == null || partitionKeys.isEmpty()) { + return Collections.emptySet(); + } + Set columnNames = new HashSet(); + for (FieldSchema field : partitionKeys) { + columnNames.add(field.getName()); + } + return columnNames; + } /* (non-Javadoc) * @see org.apache.hive.service.cli.Operation#getResultSetSchema()