Skip to content

Commit bd1ae21

Browse files
committed
Fix describe element commands
1 parent 0113eec commit bd1ae21

1 file changed

Lines changed: 23 additions & 9 deletions

File tree

ql/src/java/org/apache/hadoop/hive/ql/ddl/table/info/desc/DescTableOperation.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -201,23 +201,37 @@ private void getColumnDataColPathSpecified(Table table, Partition part, List<Fie
201201
}
202202
table.setParameters(tableProps);
203203
} else {
204-
cols.addAll(getFilteredFieldsFromDeserializer(table, deserializer, colName));
205-
colStats.addAll(context.getDb().getTableColumnStatistics(table, colNames, false));
204+
addColsResolvedFromDeserializer(table, deserializer, colName, cols);
205+
if (desc.isFormatted()) {
206+
colStats.addAll(context.getDb().getTableColumnStatistics(table, colNames, false));
207+
}
206208
}
207209
} else {
208210
List<String> partitions = new ArrayList<>();
209211
String partName = part.getName();
210212
partitions.add(partName);
211-
cols.addAll(getFilteredFieldsFromDeserializer(table, deserializer, colName));
212-
Map<String, List<ColumnStatisticsObj>> partitionColumnStatistics = context.getDb().getPartitionColumnStatistics(
213-
table.getDbName(), table.getTableName(), partitions, colNames, false);
214-
List<ColumnStatisticsObj> partitionColStat = partitionColumnStatistics.get(partName);
215-
if (partitionColStat != null) {
216-
colStats.addAll(partitionColStat);
213+
addColsResolvedFromDeserializer(table, deserializer, colName, cols);
214+
if (desc.isFormatted()) {
215+
Map<String, List<ColumnStatisticsObj>> partitionColumnStatistics = context.getDb()
216+
.getPartitionColumnStatistics(table.getDbName(), table.getTableName(), partitions,
217+
colNames, false);
218+
List<ColumnStatisticsObj> partitionColStat = partitionColumnStatistics.get(partName);
219+
if (partitionColStat != null) {
220+
colStats.addAll(partitionColStat);
221+
}
217222
}
218223
}
219224
}
220225

226+
private void addColsResolvedFromDeserializer(Table table, Deserializer deserializer, String firstColName,
227+
List<FieldSchema> cols) throws HiveException {
228+
if (desc.getColumnPath().split("\\.").length > 3 || firstColName.startsWith("$")) {
229+
cols.addAll(Hive.getFieldsFromDeserializer(desc.getColumnPath(), deserializer, context.getConf()));
230+
} else {
231+
cols.addAll(getFilteredFieldsFromDeserializer(table, deserializer, firstColName));
232+
}
233+
}
234+
221235
private List<FieldSchema> getFilteredFieldsFromDeserializer(Table table, Deserializer deserializer,
222236
String targetColName) throws HiveException {
223237
List<FieldSchema> allFields = Hive.getFieldsFromDeserializer(table.getTableName(), deserializer, context.getConf());
@@ -257,7 +271,7 @@ private void getColumnDataForPartitionKeyColumn(Table table, List<FieldSchema> c
257271
private void getColumnsForNotPartitionKeyColumn(Table table, List<FieldSchema> cols, List<ColumnStatisticsObj> colStats,
258272
Deserializer deserializer, String colName, Map<String, String> tableProps)
259273
throws HiveException {
260-
cols.addAll(getFilteredFieldsFromDeserializer(table, deserializer, colName));
274+
addColsResolvedFromDeserializer(table, deserializer, colName, cols);
261275
if (desc.isFormatted()) {
262276
List<String> parts = context.getDb().getPartitionNames(table, (short) -1);
263277
AggrStats aggrStats = context.getDb().getAggrColStatsFor(table, Lists.newArrayList(colName.toLowerCase()),

0 commit comments

Comments
 (0)