Index: ql/src/java/org/apache/hadoop/hive/ql/metadata/Partition.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/metadata/Partition.java (revision 1504737) +++ ql/src/java/org/apache/hadoop/hive/ql/metadata/Partition.java (working copy) @@ -47,6 +47,7 @@ import org.apache.hadoop.hive.ql.io.HiveOutputFormat; import org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat; import org.apache.hadoop.hive.serde2.Deserializer; +import org.apache.hadoop.hive.serde2.SerDeUtils; import org.apache.hadoop.mapred.InputFormat; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; @@ -200,7 +201,7 @@ } } // set default if columns are not set - if (tPartition.getSd().getCols() == null || tPartition.getSd().getCols().size() == 0) { + if (tPartition.getSd().getCols() == null) { if (table.getCols() != null) { tPartition.getSd().setCols(table.getCols()); } @@ -519,7 +520,19 @@ } public List getCols() { - return tPartition.getSd().getCols(); + if (!SerDeUtils.shouldGetColsFromSerDe( + tPartition.getSd().getSerdeInfo().getSerializationLib())) { + return tPartition.getSd().getCols(); + } + + try { + return Hive.getFieldsFromDeserializer(table.getTableName(), getDeserializer()); + } catch (HiveException e) { + LOG.error("Unable to get cols from serde: " + + tPartition.getSd().getSerdeInfo().getSerializationLib(), e); + } + + return new ArrayList(); } public String getLocation() { Index: ql/src/test/queries/clientpositive/serde_reported_schema.q =================================================================== --- ql/src/test/queries/clientpositive/serde_reported_schema.q (revision 1504737) +++ ql/src/test/queries/clientpositive/serde_reported_schema.q (working copy) @@ -4,6 +4,6 @@ with serdeproperties ( "serialization.class"="org.apache.hadoop.hive.serde2.thrift.test.IntString", "serialization.format"="org.apache.thrift.protocol.TBinaryProtocol"); -describe int_string; +describe extended int_string; alter table int_string add partition (b='part1'); -describe int_string partition (b='part1'); \ No newline at end of file +describe extended int_string partition (b='part1'); Index: ql/src/test/results/clientpositive/serde_reported_schema.q.out =================================================================== --- ql/src/test/results/clientpositive/serde_reported_schema.q.out (revision 1504737) +++ ql/src/test/results/clientpositive/serde_reported_schema.q.out (working copy) @@ -13,9 +13,9 @@ "serialization.format"="org.apache.thrift.protocol.TBinaryProtocol") POSTHOOK: type: CREATETABLE POSTHOOK: Output: default@int_string -PREHOOK: query: describe int_string +PREHOOK: query: describe extended int_string PREHOOK: type: DESCTABLE -POSTHOOK: query: describe int_string +POSTHOOK: query: describe extended int_string POSTHOOK: type: DESCTABLE myint int from deserializer mystring string from deserializer @@ -26,6 +26,8 @@ # col_name data_type comment b string None + +#### A masked pattern was here #### PREHOOK: query: alter table int_string add partition (b='part1') PREHOOK: type: ALTERTABLE_ADDPARTS PREHOOK: Input: default@int_string @@ -33,9 +35,9 @@ POSTHOOK: type: ALTERTABLE_ADDPARTS POSTHOOK: Input: default@int_string POSTHOOK: Output: default@int_string@b=part1 -PREHOOK: query: describe int_string partition (b='part1') +PREHOOK: query: describe extended int_string partition (b='part1') PREHOOK: type: DESCTABLE -POSTHOOK: query: describe int_string partition (b='part1') +POSTHOOK: query: describe extended int_string partition (b='part1') POSTHOOK: type: DESCTABLE myint int from deserializer mystring string from deserializer @@ -46,3 +48,5 @@ # col_name data_type comment b string None + +#### A masked pattern was here ####