/**
* 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.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.hive.metastore.api.Order;
import org.apache.hadoop.hive.serde.serdeConstants;
import org.apache.hive.hcatalog.common.HCatException;
import org.apache.hive.hcatalog.data.schema.HCatFieldSchema;
/**
* The Class HCatCreateTableDesc for defining attributes for a new table.
*/
@SuppressWarnings("deprecation")
public class HCatCreateTableDesc {
private boolean ifNotExists;
private HCatTable hcatTable;
private HCatCreateTableDesc(HCatTable hcatTable, boolean ifNotExists) {
this.hcatTable = hcatTable;
this.ifNotExists = ifNotExists;
}
/**
* Creates a builder for defining attributes.
*
* @param dbName the db name
* @param tableName the table name
* @param columns the columns
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link #create(HCatTable)}. To be removed in Hive 0.16.
public static Builder create(String dbName, String tableName, List<HCatFieldSchema> columns) {
return new Builder(dbName, tableName, columns);
}
/**
* Getter for HCatCreateTableDesc.Builder instance.
* @param table Spec for HCatTable to be created.
* @param ifNotExists Only create the table if it doesn't already exist.
* @return Builder instance.
*/
public static Builder create(HCatTable table, boolean ifNotExists) {
return new Builder(table, ifNotExists);
}
/**
* Getter for HCatCreateTableDesc.Builder instance. By default, ifNotExists is false.
* So the attempt to create the table is made even if the table already exists.
* @param table Spec for HCatTable to be created.
* @return Builder instance.
*/
public static Builder create(HCatTable table) {
return new Builder(table, false);
}
/**
* Getter for underlying HCatTable instance.
*/
public HCatTable getHCatTable() {
return this.hcatTable;
}
/**
* Gets the if not exists.
*
* @return the if not exists
*/
public boolean getIfNotExists() {
return this.ifNotExists;
}
/**
* Gets the table name.
*
* @return the table name
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getTableName()}. To be removed in Hive 0.16.
public String getTableName() {
return this.hcatTable.getTableName();
}
/**
* Gets the cols.
*
* @return the cols
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getCols()}. To be removed in Hive 0.16.
public List<HCatFieldSchema> getCols() {
return this.hcatTable.getCols();
}
/**
* Gets the partition cols.
*
* @return the partition cols
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getPartCols()}. To be removed in Hive 0.16.
public List<HCatFieldSchema> getPartitionCols() {
return this.hcatTable.getPartCols();
}
/**
* Gets the bucket cols.
*
* @return the bucket cols
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getBucketCols()}. To be removed in Hive 0.16.
public List<String> getBucketCols() {
return this.hcatTable.getBucketCols();
}
@Deprecated // @deprecated in favour of {@link HCatTable.#getNumBuckets()}.
public int getNumBuckets() {
return this.hcatTable.getNumBuckets();
}
/**
* Gets the comments.
*
* @return the comments
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#comment()}. To be removed in Hive 0.16.
public String getComments() {
return this.hcatTable.comment();
}
/**
* Gets the storage handler.
*
* @return the storage handler
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getStorageHandler()}. To be removed in Hive 0.16.
public String getStorageHandler() {
return this.hcatTable.getStorageHandler();
}
/**
* Gets the location.
*
* @return the location
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getLocation()}. To be removed in Hive 0.16.
public String getLocation() {
return this.hcatTable.getLocation();
}
/**
* Gets the external.
*
* @return the external
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getTableType()}. To be removed in Hive 0.16.
public boolean getExternal() {
return this.hcatTable.getTabletype()
.equalsIgnoreCase(HCatTable.Type.EXTERNAL_TABLE.toString());
}
/**
* Gets the sort cols.
*
* @return the sort cols
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getSortCols()}. To be removed in Hive 0.16.
public List<Order> getSortCols() {
return this.hcatTable.getSortCols();
}
/**
* Gets the tbl props.
*
* @return the tbl props
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getTblProps()}. To be removed in Hive 0.16.
public Map<String, String> getTblProps() {
return this.hcatTable.getTblProps();
}
/**
* Gets the file format.
*
* @return the file format
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#fileFormat()}. To be removed in Hive 0.16.
public String getFileFormat() {
return this.hcatTable.fileFormat();
}
/**
* Gets the database name.
*
* @return the database name
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#getDbName()}. To be removed in Hive 0.16.
public String getDatabaseName() {
return this.hcatTable.getDbName();
}
/**
* Gets the SerDe parameters; for example see {@link org.apache.hive.hcatalog.api.HCatCreateTableDesc.Builder#fieldsTerminatedBy(char)}
*/
@Deprecated
public Map<String, String> getSerdeParams() {
return this.hcatTable.getSerdeParams();
}
@Override
public String toString() {
return "HCatCreateTableDesc [ " + hcatTable.toString()
+ ", ifNotExists = " + ifNotExists + "]";
}
public static class Builder {
private boolean ifNotExists;
private HCatTable hcatTable;
@Deprecated // @deprecated in favour of {@link #Builder(HCatTable, boolean)}. To be removed in Hive 0.16.
private Builder(String dbName, String tableName, List<HCatFieldSchema> columns) {
hcatTable = new HCatTable(dbName, tableName).cols(columns);
}
private Builder(HCatTable hcatTable, boolean ifNotExists) {
this.hcatTable = hcatTable;
this.ifNotExists = ifNotExists;
}
/**
* If not exists.
*
* @param ifNotExists If set to true, hive will not throw exception, if a
* table with the same name already exists.
* @return the builder
*/
public Builder ifNotExists(boolean ifNotExists) {
this.ifNotExists = ifNotExists;
return this;
}
/**
* Partition cols.
*
* @param partCols the partition cols
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#partCols(List<FieldSchema>)}. To be removed in Hive 0.16.
public Builder partCols(List<HCatFieldSchema> partCols) {
this.hcatTable.partCols(partCols);
return this;
}
/**
* Bucket cols.
*
* @param bucketCols the bucket cols
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#bucketCols(List<FieldSchema>) and HCatTable.#numBuckets(int)}.
// To be removed in Hive 0.16.
public Builder bucketCols(List<String> bucketCols, int buckets) {
this.hcatTable.bucketCols(bucketCols).numBuckets(buckets);
return this;
}
/**
* Storage handler.
*
* @param storageHandler the storage handler
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#storageHandler(String)}. To be removed in Hive 0.16.
public Builder storageHandler(String storageHandler) throws HCatException {
this.hcatTable.storageHandler(storageHandler);
return this;
}
/**
* Location.
*
* @param location the location
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#location(String)}. To be removed in Hive 0.16.
public Builder location(String location) {
this.hcatTable.location(location);
return this;
}
/**
* Comments.
*
* @param comment the comment
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#comment(String)}. To be removed in Hive 0.16.
public Builder comments(String comment) {
this.hcatTable.comment(comment);
return this;
}
/**
* Checks if is table external.
*
* @param isExternal the is external
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#tableType(HCatTable.Type)}. To be removed in Hive 0.16.
public Builder isTableExternal(boolean isExternal) {
this.hcatTable.tableType(isExternal? HCatTable.Type.EXTERNAL_TABLE : HCatTable.Type.MANAGED_TABLE);
return this;
}
/**
* Sort cols.
*
* @param sortCols the sort cols
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#sortCols(ArrayList<Order>)}. To be removed in Hive 0.16.
public Builder sortCols(ArrayList<Order> sortCols) {
this.hcatTable.sortCols(sortCols);
return this;
}
/**
* Tbl props.
*
* @param tblProps the tbl props
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#sortCols(Map<String, String>)}.
// To be removed in Hive 0.16.
public Builder tblProps(Map<String, String> tblProps) {
this.hcatTable.tblProps(tblProps);
return this;
}
/**
* File format.
*
* @param format the format
* @return the builder
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#fileFormat(String)}. To be removed in Hive 0.16.
public Builder fileFormat(String format) {
this.hcatTable.fileFormat(format);
return this;
}
/**
* See <i>row_format</i> element of CREATE_TABLE DDL for Hive.
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#fieldsTerminatedBy()}. To be removed in Hive 0.16.
public Builder fieldsTerminatedBy(char delimiter) {
return serdeParam(serdeConstants.FIELD_DELIM, Character.toString(delimiter));
}
/**
* See <i>row_format</i> element of CREATE_TABLE DDL for Hive.
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#escapeChar()}.
public Builder escapeChar(char escapeChar) {
return serdeParam(serdeConstants.ESCAPE_CHAR, Character.toString(escapeChar));
}
/**
* See <i>row_format</i> element of CREATE_TABLE DDL for Hive.
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#collectionItemsTerminatedBy()}. To be removed in Hive 0.16.
public Builder collectionItemsTerminatedBy(char delimiter) {
return serdeParam(serdeConstants.COLLECTION_DELIM, Character.toString(delimiter));
}
/**
* See <i>row_format</i> element of CREATE_TABLE DDL for Hive.
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#mapKeysTerminatedBy()}. To be removed in Hive 0.16.
public Builder mapKeysTerminatedBy(char delimiter) {
return serdeParam(serdeConstants.MAPKEY_DELIM, Character.toString(delimiter));
}
/**
* See <i>row_format</i> element of CREATE_TABLE DDL for Hive.
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#linesTerminatedBy()}. To be removed in Hive 0.16.
public Builder linesTerminatedBy(char delimiter) {
return serdeParam(serdeConstants.LINE_DELIM, Character.toString(delimiter));
}
/**
* See <i>row_format</i> element of CREATE_TABLE DDL for Hive.
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#nullDefinedAs()}. To be removed in Hive 0.16.
public Builder nullDefinedAs(char nullChar) {
return serdeParam(serdeConstants.SERIALIZATION_NULL_FORMAT, Character.toString(nullChar));
}
/**
* used for setting arbitrary SerDe parameter
*/
@Deprecated // @deprecated in favour of {@link HCatTable.#serdeParam(Map<String, String>)}.
// To be removed in Hive 0.16.
public Builder serdeParam(String paramName, String value) {
hcatTable.serdeParam(paramName, value);
return this;
}
/**
* Builds the HCatCreateTableDesc.
*
* @return HCatCreateTableDesc
* @throws HCatException
*/
public HCatCreateTableDesc build() throws HCatException {
return new HCatCreateTableDesc(this.hcatTable, this.ifNotExists);
}
} // class Builder;
} // class HCatAddPartitionDesc;