/* * 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.streaming.mutate.client; import java.io.Serializable; import org.apache.hadoop.hive.metastore.api.StorageDescriptor; import org.apache.hadoop.hive.metastore.api.Table; /** * Describes an ACID table that can receive mutation events. Used to encode the information required by workers to write * ACID events without requiring them to once more retrieve the data from the meta store db. */ public class AcidTable implements Serializable { private static final long serialVersionUID = 1L; private final String databaseName; private final String tableName; private final boolean createPartitions; private final TableType tableType; private long transactionId; private Table table; AcidTable(String databaseName, String tableName, boolean createPartitions, TableType tableType) { this.databaseName = databaseName; this.tableName = tableName; this.createPartitions = createPartitions; this.tableType = tableType; } /** * Returns {@code 0} until such a time that a {@link Transaction} has been acquired (when * {@link MutatorClient#newTransaction()} exits), at which point this will return the * {@link Transaction#getTransactionId() transaction id}. */ public long getTransactionId() { return transactionId; } public String getDatabaseName() { return databaseName; } public String getTableName() { return tableName; } public boolean createPartitions() { return createPartitions; } /** * Returns {@code null} until such a time that the table described by the {@link #getDatabaseName() database_name} * {@code .}{@link #getTableName() table_name} has been resolved with the meta store database (when * {@link MutatorClient#connect()} exits), at which point this will then return the corresponding * {@link StorageDescriptor#getOutputFormat() OutputFormat}. */ public String getOutputFormatName() { return table != null ? table.getSd().getOutputFormat() : null; } /** * Returns {@code 0} until such a time that the table described by the {@link #getDatabaseName() database_name} * {@code .}{@link #getTableName() table_name} has been resolved with the meta store database (when * {@link MutatorClient#connect()} exits), at which point this will then return the corresponding * {@link StorageDescriptor#getNumBuckets() total bucket count}. */ public int getTotalBuckets() { return table != null ? table.getSd().getNumBuckets() : 0; } public TableType getTableType() { return tableType; } public String getQualifiedName() { return (databaseName + "." + tableName).toUpperCase(); } /** * Returns {@code null} until such a time that the table described by the {@link #getDatabaseName() database_name} * {@code .}{@link #getTableName() table_name} has been resolved with the meta store database (when * {@link MutatorClient#connect()} exits), at which point this will then return the corresponding {@link Table}. * Provided as a convenience to API users who may wish to gather further meta data regarding the table without * connecting with the meta store once more. */ public Table getTable() { return table; } void setTransactionId(long transactionId) { this.transactionId = transactionId; } void setTable(Table table) { if (!databaseName.equalsIgnoreCase(table.getDbName())) { throw new IllegalArgumentException("Incorrect database name."); } if (!tableName.equalsIgnoreCase(table.getTableName())) { throw new IllegalArgumentException("Incorrect table name."); } this.table = table; } @Override public String toString() { return "AcidTable [databaseName=" + databaseName + ", tableName=" + tableName + ", createPartitions=" + createPartitions + ", tableType=" + tableType + ", outputFormatName=" + getOutputFormatName() + ", totalBuckets=" + getTotalBuckets() + ", transactionId=" + transactionId + "]"; } }