/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.hive.hcatalog.api; import java.util.Map; import org.apache.hive.hcatalog.common.HCatException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * The Class HCatAddPartitionDesc helps users in defining partition attributes. */ public class HCatAddPartitionDesc { private static final Logger LOG = LoggerFactory.getLogger(HCatAddPartitionDesc.class); private HCatPartition hcatPartition; // The following data members are only required to support the deprecated constructor (and builder). String dbName, tableName, location; Map<String, String> partitionKeyValues; private HCatAddPartitionDesc(HCatPartition hcatPartition) { this.hcatPartition = hcatPartition; } private HCatAddPartitionDesc(String dbName, String tableName, String location, Map<String, String> partitionKeyValues) { this.hcatPartition = null; this.dbName = dbName; this.tableName = tableName; this.location = location; this.partitionKeyValues = partitionKeyValues; } HCatPartition getHCatPartition() { return hcatPartition; } HCatPartition getHCatPartition(HCatTable hcatTable) throws HCatException { assert hcatPartition == null : "hcatPartition should have been null at this point."; assert dbName.equalsIgnoreCase(hcatTable.getDbName()) : "DB names don't match."; assert tableName.equalsIgnoreCase(hcatTable.getTableName()) : "Table names don't match."; return new HCatPartition(hcatTable, partitionKeyValues, location); } /** * Gets the location. * * @return the location */ @Deprecated // @deprecated in favour of {@link HCatPartition.#getLocation()}. To be removed in Hive 0.16. public String getLocation() { return hcatPartition == null? location : hcatPartition.getLocation(); } /** * Gets the partition spec. * * @return the partition spec */ @Deprecated // @deprecated in favour of {@link HCatPartition.#getPartitionKeyValMap()}. To be removed in Hive 0.16. public Map<String, String> getPartitionSpec() { return hcatPartition == null? partitionKeyValues : hcatPartition.getPartitionKeyValMap(); } /** * Gets the table name. * * @return the table name */ @Deprecated // @deprecated in favour of {@link HCatPartition.#getTableName()}. To be removed in Hive 0.16. public String getTableName() { return hcatPartition == null? tableName : hcatPartition.getTableName(); } /** * Gets the database name. * * @return the database name */ @Deprecated // @deprecated in favour of {@link HCatPartition.#getDatabaseName()}. To be removed in Hive 0.16. public String getDatabaseName() { return hcatPartition == null? dbName : hcatPartition.getDatabaseName(); } @Override public String toString() { return "HCatAddPartitionDesc [" + hcatPartition + "]"; } /** * Creates the builder for specifying attributes. * * @param dbName the db name * @param tableName the table name * @param location the location * @param partSpec the part spec * @return the builder * @throws HCatException */ @Deprecated // @deprecated in favour of {@link HCatAddPartitionDesc.#create(HCatPartition)}. To be removed in Hive 0.16. public static Builder create(String dbName, String tableName, String location, Map<String, String> partSpec ) throws HCatException { LOG.error("Unsupported! HCatAddPartitionDesc requires HCatTable to be specified explicitly."); return new Builder(dbName, tableName, location, partSpec); } /** * Constructs a Builder instance, using an HCatPartition object. * @param partition An HCatPartition instance. * @return A Builder object that can build an appropriate HCatAddPartitionDesc. * @throws HCatException */ public static Builder create(HCatPartition partition) throws HCatException { return new Builder(partition); } /** * Builder class for constructing an HCatAddPartition instance. */ public static class Builder { private HCatPartition hcatPartition; // The following data members are only required to support the deprecated constructor (and builder). String dbName, tableName, location; Map<String, String> partitionSpec; private Builder(HCatPartition hcatPartition) { this.hcatPartition = hcatPartition; } @Deprecated // To be removed in Hive 0.16. private Builder(String dbName, String tableName, String location, Map<String, String> partitionSpec) { this.hcatPartition = null; this.dbName = dbName; this.tableName = tableName; this.location = location; this.partitionSpec = partitionSpec; } /** * Builds the HCatAddPartitionDesc. * * @return the h cat add partition desc * @throws HCatException */ public HCatAddPartitionDesc build() throws HCatException { return hcatPartition == null? new HCatAddPartitionDesc(dbName, tableName, location, partitionSpec) : new HCatAddPartitionDesc(hcatPartition); } } }