public static void setColumnsAndStorePartitionTransformSpecOfTable(
          List<FieldSchema> columns, List<FieldSchema> partitionColumns,
          HiveConf conf, Table tbl) {
    Optional<List<FieldSchema>> cols = Optional.ofNullable(columns);
    Optional<List<FieldSchema>> partCols = Optional.ofNullable(partitionColumns);
    
    if (tbl.hasNonNativePartitionSupport()) {
      tbl.getSd().setCols(new ArrayList<>());
      cols.ifPresent(c -> tbl.getSd().getCols().addAll(c));
      if (partCols.isPresent() && !partCols.get().isEmpty()) {
        // Add the partition columns to the normal columns and save the transform to the session state
        tbl.getSd().getCols().addAll(partCols.get());
        List<TransformSpec> spec = PartitionTransform.getPartitionTransformSpec(partCols.get());
        SessionStateUtil.addResourceOrThrow(conf, hive_metastoreConstants.PARTITION_TRANSFORM_SPEC, spec);
      }
    } else {
      cols.ifPresent(tbl::setFields);
      partCols.ifPresent(tbl::setPartCols);
    }
  }
Get the fully qualified name in the node.
E.g. the node of the form ^(DOT ^(DOT a b) c) will generate a name of the form "a.b.c".
ql/src/java/org/apache/hadoop/hive/ql/ddl/DDLUtils.java