public void initialize(Configuration configuration, Properties tableProperties, Properties partitionProperties)
      throws SerDeException {
    this.configuration = Optional.ofNullable(configuration);
    this.tableProperties = Objects.requireNonNull(tableProperties);
    this.partitionProperties = Optional.ofNullable(partitionProperties);
    this.properties = SerDeUtils.createOverlayedProperties(tableProperties, partitionProperties);
    this.columnNames = parseColumnNames();
    this.columnTypes = parseColumnTypes();
    this.columnComments = parseColumnComments(serdeConstants.LIST_COLUMN_COMMENTS);
    this.partitionColumnNames = parseColumnNames(serdeConstants.LIST_PARTITION_COLUMNS);
    this.partitionColumnTypes = parseColumnTypes(serdeConstants.LIST_PARTITION_COLUMN_TYPES);
    this.partitionColumnComments = parseColumnComments(serdeConstants.LIST_PARTITION_COLUMN_COMMENTS);

    Preconditions.checkArgument(this.columnNames.size() == this.columnTypes.size(),
        "Column names must match count of column types");

    log.debug("{} initialized: [{}][{}]", getClass().getName(), this.configuration, this.properties);
  }
Initialize the SerDe. By default, this will use one set of properties,
either the table properties or the partition properties. If a SerDe needs
access to both sets, it should override this method.

Eventually, once all SerDes have implemented this method, we should convert
it to an abstract method.

@param configuration Hadoop configuration
@param tableProperties Table properties
@param partitionProperties Partition properties (may be {@code null} if
         table has no partitions)
@throws NullPointerException if tableProperties is {@code null}
@throws SerDeException if SerDe fails to initialize
serde/src/java/org/apache/hadoop/hive/serde2/AbstractSerDe.java