private String getPartitionsBySpec(Table table) {
    if (table.isNonNative() && table.getStorageHandler() != null &&
      table.getStorageHandler().supportsPartitionTransform()) {
      List<TransformSpec> specs = table.getStorageHandler().getPartitionTransformSpec(table);
      if (specs.isEmpty()) {
        return "";
      }
      List<String> partitionTransforms = new ArrayList<>();
      for (TransformSpec spec : specs) {
        if (spec.getTransformType() == TransformSpec.TransformType.IDENTITY) {
          partitionTransforms.add(unparseIdentifier(spec.getColumnName()));
        } else {
          partitionTransforms.add(spec.getTransformType().name() + "(" +
            (spec.getTransformParam().isPresent() ? spec.getTransformParam().get() + ", " : "") +
            unparseIdentifier(spec.getColumnName()) + ")");
        }
      }
      return "PARTITIONED BY SPEC ( \n" + StringUtils.join(partitionTransforms, ", \n") + ")";
    }
    return "";
  }
Struct fields are identifiers, need to be unparsed.
ql/src/java/org/apache/hadoop/hive/ql/exec/DDLPlanUtils.java