You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2018/07/13 01:41:00 UTC
[58/91] [abbrv] hive git commit: HIVE-19416 : merge master into
branch (Sergey Shelukhin) 0712
http://git-wip-us.apache.org/repos/asf/hive/blob/93b9cdd6/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift
----------------------------------------------------------------------
diff --cc standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift
index 0000000,1ca6454..1b4f01a
mode 000000,100644..100644
--- a/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift
+++ b/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift
@@@ -1,0 -1,2275 +1,2318 @@@
+ #!/usr/local/bin/thrift -java
+
+ /**
+ * 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.
+ */
+
+ #
+ # Thrift Service that the MetaStore is built on
+ #
+
+ include "share/fb303/if/fb303.thrift"
+
+ namespace java org.apache.hadoop.hive.metastore.api
+ namespace php metastore
+ namespace cpp Apache.Hadoop.Hive
+
+ const string DDL_TIME = "transient_lastDdlTime"
+
+ struct Version {
+ 1: string version,
+ 2: string comments
+ }
+
+ struct FieldSchema {
+ 1: string name, // name of the field
+ 2: string type, // type of the field. primitive types defined above, specify list<TYPE_NAME>, map<TYPE_NAME, TYPE_NAME> for lists & maps
+ 3: string comment
+ }
+
+ struct SQLPrimaryKey {
+ 1: string table_db, // table schema
+ 2: string table_name, // table name
+ 3: string column_name, // column name
+ 4: i32 key_seq, // sequence number within primary key
+ 5: string pk_name, // primary key name
+ 6: bool enable_cstr, // Enable/Disable
+ 7: bool validate_cstr, // Validate/No validate
+ 8: bool rely_cstr, // Rely/No Rely
+ 9: optional string catName
+ }
+
+ struct SQLForeignKey {
+ 1: string pktable_db, // primary key table schema
+ 2: string pktable_name, // primary key table name
+ 3: string pkcolumn_name, // primary key column name
+ 4: string fktable_db, // foreign key table schema
+ 5: string fktable_name, // foreign key table name
+ 6: string fkcolumn_name, // foreign key column name
+ 7: i32 key_seq, // sequence within foreign key
+ 8: i32 update_rule, // what happens to foreign key when parent key is updated
+ 9: i32 delete_rule, // what happens to foreign key when parent key is deleted
+ 10: string fk_name, // foreign key name
+ 11: string pk_name, // primary key name
+ 12: bool enable_cstr, // Enable/Disable
+ 13: bool validate_cstr, // Validate/No validate
+ 14: bool rely_cstr, // Rely/No Rely
+ 15: optional string catName
+ }
+
+ struct SQLUniqueConstraint {
+ 1: string catName, // table catalog
+ 2: string table_db, // table schema
+ 3: string table_name, // table name
+ 4: string column_name, // column name
+ 5: i32 key_seq, // sequence number within unique constraint
+ 6: string uk_name, // unique key name
+ 7: bool enable_cstr, // Enable/Disable
+ 8: bool validate_cstr, // Validate/No validate
+ 9: bool rely_cstr, // Rely/No Rely
+ }
+
+ struct SQLNotNullConstraint {
+ 1: string catName, // table catalog
+ 2: string table_db, // table schema
+ 3: string table_name, // table name
+ 4: string column_name, // column name
+ 5: string nn_name, // not null name
+ 6: bool enable_cstr, // Enable/Disable
+ 7: bool validate_cstr, // Validate/No validate
+ 8: bool rely_cstr, // Rely/No Rely
+ }
+
+ struct SQLDefaultConstraint {
+ 1: string catName, // catalog name
+ 2: string table_db, // table schema
+ 3: string table_name, // table name
+ 4: string column_name, // column name
+ 5: string default_value,// default value
+ 6: string dc_name, // default name
+ 7: bool enable_cstr, // Enable/Disable
+ 8: bool validate_cstr, // Validate/No validate
+ 9: bool rely_cstr // Rely/No Rely
+ }
+
+ struct SQLCheckConstraint {
+ 1: string catName, // catalog name
+ 2: string table_db, // table schema
+ 3: string table_name, // table name
+ 4: string column_name, // column name
+ 5: string check_expression,// check expression
+ 6: string dc_name, // default name
+ 7: bool enable_cstr, // Enable/Disable
+ 8: bool validate_cstr, // Validate/No validate
+ 9: bool rely_cstr // Rely/No Rely
+ }
+
+ struct Type {
+ 1: string name, // one of the types in PrimitiveTypes or CollectionTypes or User defined types
+ 2: optional string type1, // object type if the name is 'list' (LIST_TYPE), key type if the name is 'map' (MAP_TYPE)
+ 3: optional string type2, // val type if the name is 'map' (MAP_TYPE)
+ 4: optional list<FieldSchema> fields // if the name is one of the user defined types
+ }
+
+ enum HiveObjectType {
+ GLOBAL = 1,
+ DATABASE = 2,
+ TABLE = 3,
+ PARTITION = 4,
+ COLUMN = 5,
+ }
+
+ enum PrincipalType {
+ USER = 1,
+ ROLE = 2,
+ GROUP = 3,
+ }
+
+ const string HIVE_FILTER_FIELD_OWNER = "hive_filter_field_owner__"
+ const string HIVE_FILTER_FIELD_PARAMS = "hive_filter_field_params__"
+ const string HIVE_FILTER_FIELD_LAST_ACCESS = "hive_filter_field_last_access__"
+
+ enum PartitionEventType {
+ LOAD_DONE = 1,
+ }
+
+ // Enums for transaction and lock management
+ enum TxnState {
+ COMMITTED = 1,
+ ABORTED = 2,
+ OPEN = 3,
+ }
+
+ enum LockLevel {
+ DB = 1,
+ TABLE = 2,
+ PARTITION = 3,
+ }
+
+ enum LockState {
+ ACQUIRED = 1, // requester has the lock
+ WAITING = 2, // requester is waiting for the lock and should call checklock at a later point to see if the lock has been obtained.
+ ABORT = 3, // the lock has been aborted, most likely due to timeout
+ NOT_ACQUIRED = 4, // returned only with lockNoWait, indicates the lock was not available and was not acquired
+ }
+
+ enum LockType {
+ SHARED_READ = 1,
+ SHARED_WRITE = 2,
+ EXCLUSIVE = 3,
+ }
+
+ enum CompactionType {
+ MINOR = 1,
+ MAJOR = 2,
+ }
+
+ enum GrantRevokeType {
+ GRANT = 1,
+ REVOKE = 2,
+ }
+
+ enum DataOperationType {
+ SELECT = 1,
+ INSERT = 2
+ UPDATE = 3,
+ DELETE = 4,
+ UNSET = 5,//this is the default to distinguish from NULL from old clients
+ NO_TXN = 6,//drop table, insert overwrite, etc - something non-transactional
+ }
+
+ // Types of events the client can request that the metastore fire. For now just support DML operations, as the metastore knows
+ // about DDL operations and there's no reason for the client to request such an event.
+ enum EventRequestType {
+ INSERT = 1,
+ UPDATE = 2,
+ DELETE = 3,
+ }
+
+ enum SerdeType {
+ HIVE = 1,
+ SCHEMA_REGISTRY = 2,
+ }
+
+ enum SchemaType {
+ HIVE = 1,
+ AVRO = 2,
+ }
+
+ enum SchemaCompatibility {
+ NONE = 1,
+ BACKWARD = 2,
+ FORWARD = 3,
+ BOTH = 4
+ }
+
+ enum SchemaValidation {
+ LATEST = 1,
+ ALL = 2
+ }
+
+ enum SchemaVersionState {
+ INITIATED = 1,
+ START_REVIEW = 2,
+ CHANGES_REQUIRED = 3,
+ REVIEWED = 4,
+ ENABLED = 5,
+ DISABLED = 6,
+ ARCHIVED = 7,
+ DELETED = 8
+ }
+
+ struct HiveObjectRef{
+ 1: HiveObjectType objectType,
+ 2: string dbName,
+ 3: string objectName,
+ 4: list<string> partValues,
+ 5: string columnName,
+ 6: optional string catName
+ }
+
+ struct PrivilegeGrantInfo {
+ 1: string privilege,
+ 2: i32 createTime,
+ 3: string grantor,
+ 4: PrincipalType grantorType,
+ 5: bool grantOption,
+ }
+
+ struct HiveObjectPrivilege {
+ 1: HiveObjectRef hiveObject,
+ 2: string principalName,
+ 3: PrincipalType principalType,
+ 4: PrivilegeGrantInfo grantInfo,
+ 5: string authorizer,
+ }
+
+ struct PrivilegeBag {
+ 1: list<HiveObjectPrivilege> privileges,
+ }
+
+ struct PrincipalPrivilegeSet {
+ 1: map<string, list<PrivilegeGrantInfo>> userPrivileges, // user name -> privilege grant info
+ 2: map<string, list<PrivilegeGrantInfo>> groupPrivileges, // group name -> privilege grant info
+ 3: map<string, list<PrivilegeGrantInfo>> rolePrivileges, //role name -> privilege grant info
+ }
+
+ struct GrantRevokePrivilegeRequest {
+ 1: GrantRevokeType requestType;
+ 2: PrivilegeBag privileges;
+ 3: optional bool revokeGrantOption; // Only for revoke request
+ }
+
+ struct GrantRevokePrivilegeResponse {
+ 1: optional bool success;
+ }
+
+ struct Role {
+ 1: string roleName,
+ 2: i32 createTime,
+ 3: string ownerName,
+ }
+
+ // Representation of a grant for a principal to a role
+ struct RolePrincipalGrant {
+ 1: string roleName,
+ 2: string principalName,
+ 3: PrincipalType principalType,
+ 4: bool grantOption,
+ 5: i32 grantTime,
+ 6: string grantorName,
+ 7: PrincipalType grantorPrincipalType
+ }
+
+ struct GetRoleGrantsForPrincipalRequest {
+ 1: required string principal_name,
+ 2: required PrincipalType principal_type
+ }
+
+ struct GetRoleGrantsForPrincipalResponse {
+ 1: required list<RolePrincipalGrant> principalGrants;
+ }
+
+ struct GetPrincipalsInRoleRequest {
+ 1: required string roleName;
+ }
+
+ struct GetPrincipalsInRoleResponse {
+ 1: required list<RolePrincipalGrant> principalGrants;
+ }
+
+ struct GrantRevokeRoleRequest {
+ 1: GrantRevokeType requestType;
+ 2: string roleName;
+ 3: string principalName;
+ 4: PrincipalType principalType;
+ 5: optional string grantor; // Needed for grant
+ 6: optional PrincipalType grantorType; // Needed for grant
+ 7: optional bool grantOption;
+ }
+
+ struct GrantRevokeRoleResponse {
+ 1: optional bool success;
+ }
+
+ struct Catalog {
+ 1: string name, // Name of the catalog
+ 2: optional string description, // description of the catalog
+ 3: string locationUri // default storage location. When databases are created in
+ // this catalog, if they do not specify a location, they will
+ // be placed in this location.
+ }
+
+ struct CreateCatalogRequest {
+ 1: Catalog catalog
+ }
+
+ struct AlterCatalogRequest {
+ 1: string name,
+ 2: Catalog newCat
+ }
+
+ struct GetCatalogRequest {
+ 1: string name
+ }
+
+ struct GetCatalogResponse {
+ 1: Catalog catalog
+ }
+
+ struct GetCatalogsResponse {
+ 1: list<string> names
+ }
+
+ struct DropCatalogRequest {
+ 1: string name
+ }
+
+ // namespace for tables
+ struct Database {
+ 1: string name,
+ 2: string description,
+ 3: string locationUri,
+ 4: map<string, string> parameters, // properties associated with the database
+ 5: optional PrincipalPrivilegeSet privileges,
+ 6: optional string ownerName,
+ 7: optional PrincipalType ownerType,
+ 8: optional string catalogName
+ }
+
+ // This object holds the information needed by SerDes
+ struct SerDeInfo {
+ 1: string name, // name of the serde, table name by default
+ 2: string serializationLib, // usually the class that implements the extractor & loader
+ 3: map<string, string> parameters, // initialization parameters
+ 4: optional string description,
+ 5: optional string serializerClass,
+ 6: optional string deserializerClass,
+ 7: optional SerdeType serdeType
+ }
+
+ // sort order of a column (column name along with asc(1)/desc(0))
+ struct Order {
+ 1: string col, // sort column name
+ 2: i32 order // asc(1) or desc(0)
+ }
+
+ // this object holds all the information about skewed table
+ struct SkewedInfo {
+ 1: list<string> skewedColNames, // skewed column names
+ 2: list<list<string>> skewedColValues, //skewed values
+ 3: map<list<string>, string> skewedColValueLocationMaps, //skewed value to location mappings
+ }
+
+ // this object holds all the information about physical storage of the data belonging to a table
+ struct StorageDescriptor {
+ 1: list<FieldSchema> cols, // required (refer to types defined above)
+ 2: string location, // defaults to <warehouse loc>/<db loc>/tablename
+ 3: string inputFormat, // SequenceFileInputFormat (binary) or TextInputFormat` or custom format
+ 4: string outputFormat, // SequenceFileOutputFormat (binary) or IgnoreKeyTextOutputFormat or custom format
+ 5: bool compressed, // compressed or not
+ 6: i32 numBuckets, // this must be specified if there are any dimension columns
+ 7: SerDeInfo serdeInfo, // serialization and deserialization information
+ 8: list<string> bucketCols, // reducer grouping columns and clustering columns and bucketing columns`
+ 9: list<Order> sortCols, // sort order of the data in each bucket
+ 10: map<string, string> parameters, // any user supplied key value hash
+ 11: optional SkewedInfo skewedInfo, // skewed information
+ 12: optional bool storedAsSubDirectories // stored as subdirectories or not
+ }
+
+ // table information
+ struct Table {
+ 1: string tableName, // name of the table
+ 2: string dbName, // database name ('default')
+ 3: string owner, // owner of this table
+ 4: i32 createTime, // creation time of the table
+ 5: i32 lastAccessTime, // last access time (usually this will be filled from HDFS and shouldn't be relied on)
+ 6: i32 retention, // retention time
+ 7: StorageDescriptor sd, // storage descriptor of the table
+ 8: list<FieldSchema> partitionKeys, // partition keys of the table. only primitive types are supported
+ 9: map<string, string> parameters, // to store comments or any other user level parameters
+ 10: string viewOriginalText, // original view text, null for non-view
+ 11: string viewExpandedText, // expanded view text, null for non-view
+ 12: string tableType, // table type enum, e.g. EXTERNAL_TABLE
+ 13: optional PrincipalPrivilegeSet privileges,
+ 14: optional bool temporary=false,
+ 15: optional bool rewriteEnabled, // rewrite enabled or not
+ 16: optional CreationMetadata creationMetadata, // only for MVs, it stores table names used and txn list at MV creation
+ 17: optional string catName, // Name of the catalog the table is in
- 18: optional PrincipalType ownerType = PrincipalType.USER // owner type of this table (default to USER for backward compatibility)
++ 18: optional PrincipalType ownerType = PrincipalType.USER, // owner type of this table (default to USER for backward compatibility)
++ 19: optional i64 writeId=-1,
++ 20: optional bool isStatsCompliant
+ }
+
+ struct Partition {
+ 1: list<string> values // string value is converted to appropriate partition key type
+ 2: string dbName,
+ 3: string tableName,
+ 4: i32 createTime,
+ 5: i32 lastAccessTime,
+ 6: StorageDescriptor sd,
+ 7: map<string, string> parameters,
+ 8: optional PrincipalPrivilegeSet privileges,
- 9: optional string catName
++ 9: optional string catName,
++ 10: optional i64 writeId=-1,
++ 11: optional bool isStatsCompliant
+ }
+
+ struct PartitionWithoutSD {
+ 1: list<string> values // string value is converted to appropriate partition key type
+ 2: i32 createTime,
+ 3: i32 lastAccessTime,
+ 4: string relativePath,
+ 5: map<string, string> parameters,
+ 6: optional PrincipalPrivilegeSet privileges
+ }
+
+ struct PartitionSpecWithSharedSD {
+ 1: list<PartitionWithoutSD> partitions,
+ 2: StorageDescriptor sd,
+ }
+
+ struct PartitionListComposingSpec {
+ 1: list<Partition> partitions
+ }
+
+ struct PartitionSpec {
+ 1: string dbName,
+ 2: string tableName,
+ 3: string rootPath,
+ 4: optional PartitionSpecWithSharedSD sharedSDPartitionSpec,
+ 5: optional PartitionListComposingSpec partitionList,
- 6: optional string catName
++ 6: optional string catName,
++ 7: optional i64 writeId=-1,
++ 8: optional bool isStatsCompliant
+ }
+
+ // column statistics
+ struct BooleanColumnStatsData {
+ 1: required i64 numTrues,
+ 2: required i64 numFalses,
+ 3: required i64 numNulls,
+ 4: optional binary bitVectors
+ }
+
+ struct DoubleColumnStatsData {
+ 1: optional double lowValue,
+ 2: optional double highValue,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ struct LongColumnStatsData {
+ 1: optional i64 lowValue,
+ 2: optional i64 highValue,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ struct StringColumnStatsData {
+ 1: required i64 maxColLen,
+ 2: required double avgColLen,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ struct BinaryColumnStatsData {
+ 1: required i64 maxColLen,
+ 2: required double avgColLen,
+ 3: required i64 numNulls,
+ 4: optional binary bitVectors
+ }
+
+
+ struct Decimal {
+ 3: required i16 scale, // force using scale first in Decimal.compareTo
+ 1: required binary unscaled
+ }
+
+ struct DecimalColumnStatsData {
+ 1: optional Decimal lowValue,
+ 2: optional Decimal highValue,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ struct Date {
+ 1: required i64 daysSinceEpoch
+ }
+
+ struct DateColumnStatsData {
+ 1: optional Date lowValue,
+ 2: optional Date highValue,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ union ColumnStatisticsData {
+ 1: BooleanColumnStatsData booleanStats,
+ 2: LongColumnStatsData longStats,
+ 3: DoubleColumnStatsData doubleStats,
+ 4: StringColumnStatsData stringStats,
+ 5: BinaryColumnStatsData binaryStats,
+ 6: DecimalColumnStatsData decimalStats,
+ 7: DateColumnStatsData dateStats
+ }
+
+ struct ColumnStatisticsObj {
+ 1: required string colName,
+ 2: required string colType,
+ 3: required ColumnStatisticsData statsData
+ }
+
+ struct ColumnStatisticsDesc {
+ 1: required bool isTblLevel,
+ 2: required string dbName,
+ 3: required string tableName,
+ 4: optional string partName,
+ 5: optional i64 lastAnalyzed,
+ 6: optional string catName
+ }
+
+ struct ColumnStatistics {
+ 1: required ColumnStatisticsDesc statsDesc,
-2: required list<ColumnStatisticsObj> statsObj;
++2: required list<ColumnStatisticsObj> statsObj,
++3: optional i64 txnId=-1, // transaction id of the query that sends this structure TODO## needed?
++4: optional string validWriteIdList, // valid write id list for the table for which this struct is being sent
++5: optional bool isStatsCompliant // Are the stats isolation-level-compliant with the
++ // the calling query?
+ }
+
+ struct AggrStats {
+ 1: required list<ColumnStatisticsObj> colStats,
-2: required i64 partsFound // number of partitions for which stats were found
++2: required i64 partsFound, // number of partitions for which stats were found
++3: optional bool isStatsCompliant
+ }
+
+ struct SetPartitionsStatsRequest {
+ 1: required list<ColumnStatistics> colStats,
-2: optional bool needMerge //stats need to be merged with the existing stats
++2: optional bool needMerge, //stats need to be merged with the existing stats
++3: optional i64 txnId=-1, // transaction id of the query that sends this structure
++4: optional i64 writeId=-1, // writeId for the current query that updates the stats
++5: optional string validWriteIdList // valid write id list for the table for which this struct is being sent
+ }
+
+ // schema of the table/query results etc.
+ struct Schema {
+ // column names, types, comments
+ 1: list<FieldSchema> fieldSchemas, // delimiters etc
+ 2: map<string, string> properties
+ }
+
+ // Key-value store to be used with selected
+ // Metastore APIs (create, alter methods).
+ // The client can pass environment properties / configs that can be
+ // accessed in hooks.
+ struct EnvironmentContext {
+ 1: map<string, string> properties
+ }
+
+ struct PrimaryKeysRequest {
+ 1: required string db_name,
+ 2: required string tbl_name,
+ 3: optional string catName
+ }
+
+ struct PrimaryKeysResponse {
+ 1: required list<SQLPrimaryKey> primaryKeys
+ }
+
+ struct ForeignKeysRequest {
+ 1: string parent_db_name,
+ 2: string parent_tbl_name,
+ 3: string foreign_db_name,
+ 4: string foreign_tbl_name
+ 5: optional string catName // No cross catalog constraints
+ }
+
+ struct ForeignKeysResponse {
+ 1: required list<SQLForeignKey> foreignKeys
+ }
+
+ struct UniqueConstraintsRequest {
+ 1: required string catName,
+ 2: required string db_name,
+ 3: required string tbl_name,
+ }
+
+ struct UniqueConstraintsResponse {
+ 1: required list<SQLUniqueConstraint> uniqueConstraints
+ }
+
+ struct NotNullConstraintsRequest {
+ 1: required string catName,
+ 2: required string db_name,
+ 3: required string tbl_name,
+ }
+
+ struct NotNullConstraintsResponse {
+ 1: required list<SQLNotNullConstraint> notNullConstraints
+ }
+
+ struct DefaultConstraintsRequest {
+ 1: required string catName,
+ 2: required string db_name,
+ 3: required string tbl_name
+ }
+
+ struct DefaultConstraintsResponse {
+ 1: required list<SQLDefaultConstraint> defaultConstraints
+ }
+
+ struct CheckConstraintsRequest {
+ 1: required string catName,
+ 2: required string db_name,
+ 3: required string tbl_name
+ }
+
+ struct CheckConstraintsResponse {
+ 1: required list<SQLCheckConstraint> checkConstraints
+ }
+
+
+ struct DropConstraintRequest {
+ 1: required string dbname,
+ 2: required string tablename,
+ 3: required string constraintname,
+ 4: optional string catName
+ }
+
+ struct AddPrimaryKeyRequest {
+ 1: required list<SQLPrimaryKey> primaryKeyCols
+ }
+
+ struct AddForeignKeyRequest {
+ 1: required list<SQLForeignKey> foreignKeyCols
+ }
+
+ struct AddUniqueConstraintRequest {
+ 1: required list<SQLUniqueConstraint> uniqueConstraintCols
+ }
+
+ struct AddNotNullConstraintRequest {
+ 1: required list<SQLNotNullConstraint> notNullConstraintCols
+ }
+
+ struct AddDefaultConstraintRequest {
+ 1: required list<SQLDefaultConstraint> defaultConstraintCols
+ }
+
+ struct AddCheckConstraintRequest {
+ 1: required list<SQLCheckConstraint> checkConstraintCols
+ }
+
+ // Return type for get_partitions_by_expr
+ struct PartitionsByExprResult {
+ 1: required list<Partition> partitions,
+ // Whether the results has any (currently, all) partitions which may or may not match
+ 2: required bool hasUnknownPartitions
+ }
+
+ struct PartitionsByExprRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required binary expr,
+ 4: optional string defaultPartitionName,
+ 5: optional i16 maxParts=-1
+ 6: optional string catName
+ }
+
+ struct TableStatsResult {
- 1: required list<ColumnStatisticsObj> tableStats
++ 1: required list<ColumnStatisticsObj> tableStats,
++ 2: optional bool isStatsCompliant
+ }
+
+ struct PartitionsStatsResult {
- 1: required map<string, list<ColumnStatisticsObj>> partStats
++ 1: required map<string, list<ColumnStatisticsObj>> partStats,
++ 2: optional bool isStatsCompliant
+ }
+
+ struct TableStatsRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required list<string> colNames
- 4: optional string catName
++ 4: optional string catName,
++ 5: optional i64 txnId=-1, // transaction id of the query that sends this structure
++ 6: optional string validWriteIdList // valid write id list for the table for which this struct is being sent
+ }
+
+ struct PartitionsStatsRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required list<string> colNames,
+ 4: required list<string> partNames,
- 5: optional string catName
++ 5: optional string catName,
++ 6: optional i64 txnId=-1, // transaction id of the query that sends this structure
++ 7: optional string validWriteIdList // valid write id list for the table for which this struct is being sent
+ }
+
+ // Return type for add_partitions_req
+ struct AddPartitionsResult {
+ 1: optional list<Partition> partitions,
++ 2: optional bool isStatsCompliant
+ }
+
+ // Request type for add_partitions_req
+ struct AddPartitionsRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required list<Partition> parts,
+ 4: required bool ifNotExists,
+ 5: optional bool needResult=true,
- 6: optional string catName
++ 6: optional string catName,
++ 7: optional i64 txnId=-1,
++ 8: optional string validWriteIdList
+ }
+
+ // Return type for drop_partitions_req
+ struct DropPartitionsResult {
+ 1: optional list<Partition> partitions,
+ }
+
+ struct DropPartitionsExpr {
+ 1: required binary expr;
+ 2: optional i32 partArchiveLevel;
+ }
+
+ union RequestPartsSpec {
+ 1: list<string> names;
+ 2: list<DropPartitionsExpr> exprs;
+ }
+
+ // Request type for drop_partitions_req
+ // TODO: we might want to add "bestEffort" flag; where a subset can fail
+ struct DropPartitionsRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required RequestPartsSpec parts,
+ 4: optional bool deleteData,
+ 5: optional bool ifExists=true, // currently verified on client
+ 6: optional bool ignoreProtection,
+ 7: optional EnvironmentContext environmentContext,
+ 8: optional bool needResult=true,
+ 9: optional string catName
+ }
+
+ struct PartitionValuesRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required list<FieldSchema> partitionKeys;
+ 4: optional bool applyDistinct = true;
+ 5: optional string filter;
+ 6: optional list<FieldSchema> partitionOrder;
+ 7: optional bool ascending = true;
+ 8: optional i64 maxParts = -1;
+ 9: optional string catName
+ }
+
+ struct PartitionValuesRow {
+ 1: required list<string> row;
+ }
+
+ struct PartitionValuesResponse {
+ 1: required list<PartitionValuesRow> partitionValues;
+ }
+
+ enum FunctionType {
+ JAVA = 1,
+ }
+
+ enum ResourceType {
+ JAR = 1,
+ FILE = 2,
+ ARCHIVE = 3,
+ }
+
+ struct ResourceUri {
+ 1: ResourceType resourceType,
+ 2: string uri,
+ }
+
+ // User-defined function
+ struct Function {
+ 1: string functionName,
+ 2: string dbName,
+ 3: string className,
+ 4: string ownerName,
+ 5: PrincipalType ownerType,
+ 6: i32 createTime,
+ 7: FunctionType functionType,
+ 8: list<ResourceUri> resourceUris,
+ 9: optional string catName
+ }
+
+ // Structs for transaction and locks
+ struct TxnInfo {
+ 1: required i64 id,
+ 2: required TxnState state,
+ 3: required string user, // used in 'show transactions' to help admins find who has open transactions
+ 4: required string hostname, // used in 'show transactions' to help admins find who has open transactions
+ 5: optional string agentInfo = "Unknown",
+ 6: optional i32 heartbeatCount=0,
+ 7: optional string metaInfo,
+ 8: optional i64 startedTime,
+ 9: optional i64 lastHeartbeatTime,
+ }
+
+ struct GetOpenTxnsInfoResponse {
+ 1: required i64 txn_high_water_mark,
+ 2: required list<TxnInfo> open_txns,
+ }
+
+ struct GetOpenTxnsResponse {
+ 1: required i64 txn_high_water_mark,
+ 2: required list<i64> open_txns, // set<i64> changed to list<i64> since 3.0
+ 3: optional i64 min_open_txn, //since 1.3,2.2
+ 4: required binary abortedBits, // since 3.0
+ }
+
+ struct OpenTxnRequest {
+ 1: required i32 num_txns,
+ 2: required string user,
+ 3: required string hostname,
+ 4: optional string agentInfo = "Unknown",
+ 5: optional string replPolicy,
+ 6: optional list<i64> replSrcTxnIds,
+ }
+
+ struct OpenTxnsResponse {
+ 1: required list<i64> txn_ids,
+ }
+
+ struct AbortTxnRequest {
+ 1: required i64 txnid,
+ 2: optional string replPolicy,
+ }
+
+ struct AbortTxnsRequest {
+ 1: required list<i64> txn_ids,
+ }
+
+ struct CommitTxnRequest {
+ 1: required i64 txnid,
+ 2: optional string replPolicy,
+ // Information related to write operations done in this transaction.
+ 3: optional list<WriteEventInfo> writeEventInfos,
+ }
+
+ struct WriteEventInfo {
+ 1: required i64 writeId,
+ 2: required string database,
+ 3: required string table,
+ 4: required string files,
+ 5: optional string partition,
+ 6: optional string tableObj, // repl txn task does not need table object for commit
+ 7: optional string partitionObj,
+ }
+
+ struct ReplTblWriteIdStateRequest {
+ 1: required string validWriteIdlist,
+ 2: required string user,
+ 3: required string hostName,
+ 4: required string dbName,
+ 5: required string tableName,
+ 6: optional list<string> partNames,
+ }
+
+ // Request msg to get the valid write ids list for the given list of tables wrt to input validTxnList
+ struct GetValidWriteIdsRequest {
+ 1: required list<string> fullTableNames, // Full table names of format <db_name>.<table_name>
+ 2: required string validTxnList, // Valid txn list string wrt the current txn of the caller
+ }
+
+ // Valid Write ID list of one table wrt to current txn
+ struct TableValidWriteIds {
+ 1: required string fullTableName, // Full table name of format <db_name>.<table_name>
+ 2: required i64 writeIdHighWaterMark, // The highest write id valid for this table wrt given txn
+ 3: required list<i64> invalidWriteIds, // List of open and aborted writes ids in the table
+ 4: optional i64 minOpenWriteId, // Minimum write id which maps to a opened txn
+ 5: required binary abortedBits, // Bit array to identify the aborted write ids in invalidWriteIds list
+ }
+
+ // Valid Write ID list for all the input tables wrt to current txn
+ struct GetValidWriteIdsResponse {
+ 1: required list<TableValidWriteIds> tblValidWriteIds,
+ }
+
+ // Request msg to allocate table write ids for the given list of txns
+ struct AllocateTableWriteIdsRequest {
+ 1: required string dbName,
+ 2: required string tableName,
+ // Either txnIds or replPolicy+srcTxnToWriteIdList can exist in a call. txnIds is used by normal flow and
+ // replPolicy+srcTxnToWriteIdList is used by replication task.
+ 3: optional list<i64> txnIds,
+ 4: optional string replPolicy,
+ // The list is assumed to be sorted by both txnids and write ids. The write id list is assumed to be contiguous.
+ 5: optional list<TxnToWriteId> srcTxnToWriteIdList,
+ }
+
+ // Map for allocated write id against the txn for which it is allocated
+ struct TxnToWriteId {
+ 1: required i64 txnId,
+ 2: required i64 writeId,
+ }
+
+ struct AllocateTableWriteIdsResponse {
+ 1: required list<TxnToWriteId> txnToWriteIds,
+ }
+
+ struct LockComponent {
+ 1: required LockType type,
+ 2: required LockLevel level,
+ 3: required string dbname,
+ 4: optional string tablename,
+ 5: optional string partitionname,
+ 6: optional DataOperationType operationType = DataOperationType.UNSET,
+ 7: optional bool isTransactional = false,
+ 8: optional bool isDynamicPartitionWrite = false
+ }
+
+ struct LockRequest {
+ 1: required list<LockComponent> component,
+ 2: optional i64 txnid,
+ 3: required string user, // used in 'show locks' to help admins find who has open locks
+ 4: required string hostname, // used in 'show locks' to help admins find who has open locks
+ 5: optional string agentInfo = "Unknown",
+ }
+
+ struct LockResponse {
+ 1: required i64 lockid,
+ 2: required LockState state,
+ }
+
+ struct CheckLockRequest {
+ 1: required i64 lockid,
+ 2: optional i64 txnid,
+ 3: optional i64 elapsed_ms,
+ }
+
+ struct UnlockRequest {
+ 1: required i64 lockid,
+ }
+
+ struct ShowLocksRequest {
+ 1: optional string dbname,
+ 2: optional string tablename,
+ 3: optional string partname,
+ 4: optional bool isExtended=false,
+ }
+
+ struct ShowLocksResponseElement {
+ 1: required i64 lockid,
+ 2: required string dbname,
+ 3: optional string tablename,
+ 4: optional string partname,
+ 5: required LockState state,
+ 6: required LockType type,
+ 7: optional i64 txnid,
+ 8: required i64 lastheartbeat,
+ 9: optional i64 acquiredat,
+ 10: required string user,
+ 11: required string hostname,
+ 12: optional i32 heartbeatCount = 0,
+ 13: optional string agentInfo,
+ 14: optional i64 blockedByExtId,
+ 15: optional i64 blockedByIntId,
+ 16: optional i64 lockIdInternal,
+ }
+
+ struct ShowLocksResponse {
+ 1: list<ShowLocksResponseElement> locks,
+ }
+
+ struct HeartbeatRequest {
+ 1: optional i64 lockid,
+ 2: optional i64 txnid
+ }
+
+ struct HeartbeatTxnRangeRequest {
+ 1: required i64 min,
+ 2: required i64 max
+ }
+
+ struct HeartbeatTxnRangeResponse {
+ 1: required set<i64> aborted,
+ 2: required set<i64> nosuch
+ }
+
+ struct CompactionRequest {
+ 1: required string dbname,
+ 2: required string tablename,
+ 3: optional string partitionname,
+ 4: required CompactionType type,
+ 5: optional string runas,
+ 6: optional map<string, string> properties
+ }
+
+ struct CompactionResponse {
+ 1: required i64 id,
+ 2: required string state,
+ 3: required bool accepted
+ }
+
+ struct ShowCompactRequest {
+ }
+
+ struct ShowCompactResponseElement {
+ 1: required string dbname,
+ 2: required string tablename,
+ 3: optional string partitionname,
+ 4: required CompactionType type,
+ 5: required string state,
+ 6: optional string workerid,
+ 7: optional i64 start,
+ 8: optional string runAs,
+ 9: optional i64 hightestTxnId, // Highest Txn ID handled by this compaction
+ 10: optional string metaInfo,
+ 11: optional i64 endTime,
+ 12: optional string hadoopJobId = "None",
+ 13: optional i64 id,
+ }
+
+ struct ShowCompactResponse {
+ 1: required list<ShowCompactResponseElement> compacts,
+ }
+
+ struct AddDynamicPartitions {
+ 1: required i64 txnid,
+ 2: required i64 writeid,
+ 3: required string dbname,
+ 4: required string tablename,
+ 5: required list<string> partitionnames,
+ 6: optional DataOperationType operationType = DataOperationType.UNSET
+ }
+
+ struct BasicTxnInfo {
+ 1: required bool isnull,
+ 2: optional i64 time,
+ 3: optional i64 txnid,
+ 4: optional string dbname,
+ 5: optional string tablename,
+ 6: optional string partitionname
+ }
+
+ struct CreationMetadata {
+ 1: required string catName
+ 2: required string dbName,
+ 3: required string tblName,
+ 4: required set<string> tablesUsed,
+ 5: optional string validTxnList,
+ }
+
+ struct NotificationEventRequest {
+ 1: required i64 lastEvent,
+ 2: optional i32 maxEvents,
+ }
+
+ struct NotificationEvent {
+ 1: required i64 eventId,
+ 2: required i32 eventTime,
+ 3: required string eventType,
+ 4: optional string dbName,
+ 5: optional string tableName,
+ 6: required string message,
+ 7: optional string messageFormat,
+ 8: optional string catName
+ }
+
+ struct NotificationEventResponse {
+ 1: required list<NotificationEvent> events,
+ }
+
+ struct CurrentNotificationEventId {
+ 1: required i64 eventId,
+ }
+
+ struct NotificationEventsCountRequest {
+ 1: required i64 fromEventId,
+ 2: required string dbName,
+ 3: optional string catName
+ }
+
+ struct NotificationEventsCountResponse {
+ 1: required i64 eventsCount,
+ }
+
+ struct InsertEventRequestData {
+ 1: optional bool replace,
+ 2: required list<string> filesAdded,
+ // Checksum of files (hex string of checksum byte payload)
+ 3: optional list<string> filesAddedChecksum,
+ // Used by acid operation to create the sub directory
+ 4: optional list<string> subDirectoryList,
+ }
+
+ union FireEventRequestData {
+ 1: InsertEventRequestData insertData
+ }
+
+ struct FireEventRequest {
+ 1: required bool successful,
+ 2: required FireEventRequestData data
+ // dbname, tablename, and partition vals are included as optional in the top level event rather than placed in each type of
+ // subevent as I assume they'll be used across most event types.
+ 3: optional string dbName,
+ 4: optional string tableName,
+ 5: optional list<string> partitionVals,
+ 6: optional string catName,
+ }
+
+ struct FireEventResponse {
+ // NOP for now, this is just a place holder for future responses
+ }
+
+ struct WriteNotificationLogRequest {
+ 1: required i64 txnId,
+ 2: required i64 writeId,
+ 3: required string db,
+ 4: required string table,
+ 5: required InsertEventRequestData fileInfo,
+ 6: optional list<string> partitionVals,
+ }
+
+ struct WriteNotificationLogResponse {
+ // NOP for now, this is just a place holder for future responses
+ }
+
+ struct MetadataPpdResult {
+ 1: optional binary metadata,
+ 2: optional binary includeBitset
+ }
+
+ // Return type for get_file_metadata_by_expr
+ struct GetFileMetadataByExprResult {
+ 1: required map<i64, MetadataPpdResult> metadata,
+ 2: required bool isSupported
+ }
+
+ enum FileMetadataExprType {
+ ORC_SARG = 1
+ }
+
+
+ // Request type for get_file_metadata_by_expr
+ struct GetFileMetadataByExprRequest {
+ 1: required list<i64> fileIds,
+ 2: required binary expr,
+ 3: optional bool doGetFooters,
+ 4: optional FileMetadataExprType type
+ }
+
+ // Return type for get_file_metadata
+ struct GetFileMetadataResult {
+ 1: required map<i64, binary> metadata,
+ 2: required bool isSupported
+ }
+
+ // Request type for get_file_metadata
+ struct GetFileMetadataRequest {
+ 1: required list<i64> fileIds
+ }
+
+ // Return type for put_file_metadata
+ struct PutFileMetadataResult {
+ }
+
+ // Request type for put_file_metadata
+ struct PutFileMetadataRequest {
+ 1: required list<i64> fileIds,
+ 2: required list<binary> metadata,
+ 3: optional FileMetadataExprType type
+ }
+
+ // Return type for clear_file_metadata
+ struct ClearFileMetadataResult {
+ }
+
+ // Request type for clear_file_metadata
+ struct ClearFileMetadataRequest {
+ 1: required list<i64> fileIds
+ }
+
+ // Return type for cache_file_metadata
+ struct CacheFileMetadataResult {
+ 1: required bool isSupported
+ }
+
+ // Request type for cache_file_metadata
+ struct CacheFileMetadataRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: optional string partName,
+ 4: optional bool isAllParts
+ }
+
+ struct GetAllFunctionsResponse {
+ 1: optional list<Function> functions
+ }
+
+ enum ClientCapability {
+ TEST_CAPABILITY = 1,
+ INSERT_ONLY_TABLES = 2
+ }
+
+
+ struct ClientCapabilities {
+ 1: required list<ClientCapability> values
+ }
+
+ struct GetTableRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: optional ClientCapabilities capabilities,
- 4: optional string catName
++ 4: optional string catName,
++ 5: optional i64 txnId=-1,
++ 6: optional string validWriteIdList
+ }
+
+ struct GetTableResult {
- 1: required Table table
++ 1: required Table table,
++ 2: optional bool isStatsCompliant
+ }
+
+ struct GetTablesRequest {
+ 1: required string dbName,
+ 2: optional list<string> tblNames,
+ 3: optional ClientCapabilities capabilities,
+ 4: optional string catName
+ }
+
+ struct GetTablesResult {
+ 1: required list<Table> tables
+ }
+
+ // Request type for cm_recycle
+ struct CmRecycleRequest {
+ 1: required string dataPath,
+ 2: required bool purge
+ }
+
+ // Response type for cm_recycle
+ struct CmRecycleResponse {
+ }
+
+ struct TableMeta {
+ 1: required string dbName;
+ 2: required string tableName;
+ 3: required string tableType;
+ 4: optional string comments;
+ 5: optional string catName;
+ }
+
+ struct Materialization {
+ 1: required set<string> tablesUsed;
+ 2: optional string validTxnList
+ 3: optional i64 invalidationTime;
+ 4: optional bool sourceTablesUpdateDeleteModified;
+ }
+
+ // Data types for workload management.
+
+ enum WMResourcePlanStatus {
+ ACTIVE = 1,
+ ENABLED = 2,
+ DISABLED = 3
+ }
+
+ enum WMPoolSchedulingPolicy {
+ FAIR = 1,
+ FIFO = 2
+ }
+
+ struct WMResourcePlan {
+ 1: required string name;
+ 2: optional WMResourcePlanStatus status;
+ 3: optional i32 queryParallelism;
+ 4: optional string defaultPoolPath;
+ }
+
+ struct WMNullableResourcePlan {
+ 1: optional string name;
+ 2: optional WMResourcePlanStatus status;
+ 4: optional i32 queryParallelism;
+ 5: optional bool isSetQueryParallelism;
+ 6: optional string defaultPoolPath;
+ 7: optional bool isSetDefaultPoolPath;
+ }
+
+ struct WMPool {
+ 1: required string resourcePlanName;
+ 2: required string poolPath;
+ 3: optional double allocFraction;
+ 4: optional i32 queryParallelism;
+ 5: optional string schedulingPolicy;
+ }
+
+
+ struct WMNullablePool {
+ 1: required string resourcePlanName;
+ 2: required string poolPath;
+ 3: optional double allocFraction;
+ 4: optional i32 queryParallelism;
+ 5: optional string schedulingPolicy;
+ 6: optional bool isSetSchedulingPolicy;
+ }
+
+ struct WMTrigger {
+ 1: required string resourcePlanName;
+ 2: required string triggerName;
+ 3: optional string triggerExpression;
+ 4: optional string actionExpression;
+ 5: optional bool isInUnmanaged;
+ }
+
+ struct WMMapping {
+ 1: required string resourcePlanName;
+ 2: required string entityType;
+ 3: required string entityName;
+ 4: optional string poolPath;
+ 5: optional i32 ordering;
+ }
+
+ struct WMPoolTrigger {
+ 1: required string pool;
+ 2: required string trigger;
+ }
+
+ struct WMFullResourcePlan {
+ 1: required WMResourcePlan plan;
+ 2: required list<WMPool> pools;
+ 3: optional list<WMMapping> mappings;
+ 4: optional list<WMTrigger> triggers;
+ 5: optional list<WMPoolTrigger> poolTriggers;
+ }
+
+ // Request response for workload management API's.
+
+ struct WMCreateResourcePlanRequest {
+ 1: optional WMResourcePlan resourcePlan;
+ 2: optional string copyFrom;
+ }
+
+ struct WMCreateResourcePlanResponse {
+ }
+
+ struct WMGetActiveResourcePlanRequest {
+ }
+
+ struct WMGetActiveResourcePlanResponse {
+ 1: optional WMFullResourcePlan resourcePlan;
+ }
+
+ struct WMGetResourcePlanRequest {
+ 1: optional string resourcePlanName;
+ }
+
+ struct WMGetResourcePlanResponse {
+ 1: optional WMFullResourcePlan resourcePlan;
+ }
+
+ struct WMGetAllResourcePlanRequest {
+ }
+
+ struct WMGetAllResourcePlanResponse {
+ 1: optional list<WMResourcePlan> resourcePlans;
+ }
+
+ struct WMAlterResourcePlanRequest {
+ 1: optional string resourcePlanName;
+ 2: optional WMNullableResourcePlan resourcePlan;
+ 3: optional bool isEnableAndActivate;
+ 4: optional bool isForceDeactivate;
+ 5: optional bool isReplace;
+ }
+
+ struct WMAlterResourcePlanResponse {
+ 1: optional WMFullResourcePlan fullResourcePlan;
+ }
+
+ struct WMValidateResourcePlanRequest {
+ 1: optional string resourcePlanName;
+ }
+
+ struct WMValidateResourcePlanResponse {
+ 1: optional list<string> errors;
+ 2: optional list<string> warnings;
+ }
+
+ struct WMDropResourcePlanRequest {
+ 1: optional string resourcePlanName;
+ }
+
+ struct WMDropResourcePlanResponse {
+ }
+
+ struct WMCreateTriggerRequest {
+ 1: optional WMTrigger trigger;
+ }
+
+ struct WMCreateTriggerResponse {
+ }
+
+ struct WMAlterTriggerRequest {
+ 1: optional WMTrigger trigger;
+ }
+
+ struct WMAlterTriggerResponse {
+ }
+
+ struct WMDropTriggerRequest {
+ 1: optional string resourcePlanName;
+ 2: optional string triggerName;
+ }
+
+ struct WMDropTriggerResponse {
+ }
+
+ struct WMGetTriggersForResourePlanRequest {
+ 1: optional string resourcePlanName;
+ }
+
+ struct WMGetTriggersForResourePlanResponse {
+ 1: optional list<WMTrigger> triggers;
+ }
+
+ struct WMCreatePoolRequest {
+ 1: optional WMPool pool;
+ }
+
+ struct WMCreatePoolResponse {
+ }
+
+ struct WMAlterPoolRequest {
+ 1: optional WMNullablePool pool;
+ 2: optional string poolPath;
+ }
+
+ struct WMAlterPoolResponse {
+ }
+
+ struct WMDropPoolRequest {
+ 1: optional string resourcePlanName;
+ 2: optional string poolPath;
+ }
+
+ struct WMDropPoolResponse {
+ }
+
+ struct WMCreateOrUpdateMappingRequest {
+ 1: optional WMMapping mapping;
+ 2: optional bool update;
+ }
+
+ struct WMCreateOrUpdateMappingResponse {
+ }
+
+ struct WMDropMappingRequest {
+ 1: optional WMMapping mapping;
+ }
+
+ struct WMDropMappingResponse {
+ }
+
+ struct WMCreateOrDropTriggerToPoolMappingRequest {
+ 1: optional string resourcePlanName;
+ 2: optional string triggerName;
+ 3: optional string poolPath;
+ 4: optional bool drop;
+ }
+
+ struct WMCreateOrDropTriggerToPoolMappingResponse {
+ }
+
+ // Schema objects
+ // Schema is already taken, so for the moment I'm calling it an ISchema for Independent Schema
+ struct ISchema {
+ 1: SchemaType schemaType,
+ 2: string name,
+ 3: string catName,
+ 4: string dbName,
+ 5: SchemaCompatibility compatibility,
+ 6: SchemaValidation validationLevel,
+ 7: bool canEvolve,
+ 8: optional string schemaGroup,
+ 9: optional string description
+ }
+
+ struct ISchemaName {
+ 1: string catName,
+ 2: string dbName,
+ 3: string schemaName
+ }
+
+ struct AlterISchemaRequest {
+ 1: ISchemaName name,
+ 3: ISchema newSchema
+ }
+
+ struct SchemaVersion {
+ 1: ISchemaName schema,
+ 2: i32 version,
+ 3: i64 createdAt,
+ 4: list<FieldSchema> cols,
+ 5: optional SchemaVersionState state,
+ 6: optional string description,
+ 7: optional string schemaText,
+ 8: optional string fingerprint,
+ 9: optional string name,
+ 10: optional SerDeInfo serDe
+ }
+
+ struct SchemaVersionDescriptor {
+ 1: ISchemaName schema,
+ 2: i32 version
+ }
+
+ struct FindSchemasByColsRqst {
+ 1: optional string colName,
+ 2: optional string colNamespace,
+ 3: optional string type
+ }
+
+ struct FindSchemasByColsResp {
+ 1: list<SchemaVersionDescriptor> schemaVersions
+ }
+
+ struct MapSchemaVersionToSerdeRequest {
+ 1: SchemaVersionDescriptor schemaVersion,
+ 2: string serdeName
+ }
+
+ struct SetSchemaVersionStateRequest {
+ 1: SchemaVersionDescriptor schemaVersion,
+ 2: SchemaVersionState state
+ }
+
+ struct GetSerdeRequest {
+ 1: string serdeName
+ }
+
+ struct RuntimeStat {
+ 1: optional i32 createTime,
+ 2: required i32 weight,
+ 3: required binary payload
+ }
+
+ struct GetRuntimeStatsRequest {
+ 1: required i32 maxWeight,
+ 2: required i32 maxCreateTime
+ }
+
++struct AlterPartitionsRequest {
++ 1: required string dbName,
++ 2: required string tableName,
++ 3: required list<Partition> partitions,
++ 4: required EnvironmentContext environmentContext,
++ 5: optional i64 txnId=-1,
++ 6: optional i64 writeId=-1,
++ 7: optional string validWriteIdList
++}
++
++struct AlterPartitionsResponse {
++}
++
+ // Exceptions.
+
+ exception MetaException {
+ 1: string message
+ }
+
+ exception UnknownTableException {
+ 1: string message
+ }
+
+ exception UnknownDBException {
+ 1: string message
+ }
+
+ exception AlreadyExistsException {
+ 1: string message
+ }
+
+ exception InvalidPartitionException {
+ 1: string message
+ }
+
+ exception UnknownPartitionException {
+ 1: string message
+ }
+
+ exception InvalidObjectException {
+ 1: string message
+ }
+
+ exception NoSuchObjectException {
+ 1: string message
+ }
+
+ exception InvalidOperationException {
+ 1: string message
+ }
+
+ exception ConfigValSecurityException {
+ 1: string message
+ }
+
+ exception InvalidInputException {
+ 1: string message
+ }
+
+ // Transaction and lock exceptions
+ exception NoSuchTxnException {
+ 1: string message
+ }
+
+ exception TxnAbortedException {
+ 1: string message
+ }
+
+ exception TxnOpenException {
+ 1: string message
+ }
+
+ exception NoSuchLockException {
+ 1: string message
+ }
+
+ /**
+ * This interface is live.
+ */
+ service ThriftHiveMetastore extends fb303.FacebookService
+ {
+ string getMetaConf(1:string key) throws(1:MetaException o1)
+ void setMetaConf(1:string key, 2:string value) throws(1:MetaException o1)
+
+ void create_catalog(1: CreateCatalogRequest catalog) throws (1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3: MetaException o3)
+ void alter_catalog(1: AlterCatalogRequest rqst) throws (1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+ GetCatalogResponse get_catalog(1: GetCatalogRequest catName) throws (1:NoSuchObjectException o1, 2:MetaException o2)
+ GetCatalogsResponse get_catalogs() throws (1:MetaException o1)
+ void drop_catalog(1: DropCatalogRequest catName) throws (1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+
+ void create_database(1:Database database) throws(1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3:MetaException o3)
+ Database get_database(1:string name) throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void drop_database(1:string name, 2:bool deleteData, 3:bool cascade) throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+ list<string> get_databases(1:string pattern) throws(1:MetaException o1)
+ list<string> get_all_databases() throws(1:MetaException o1)
+ void alter_database(1:string dbname, 2:Database db) throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // returns the type with given name (make seperate calls for the dependent types if needed)
+ Type get_type(1:string name) throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ bool create_type(1:Type type) throws(1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3:MetaException o3)
+ bool drop_type(1:string type) throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ map<string, Type> get_type_all(1:string name)
+ throws(1:MetaException o2)
+
+ // Gets a list of FieldSchemas describing the columns of a particular table
+ list<FieldSchema> get_fields(1: string db_name, 2: string table_name) throws (1: MetaException o1, 2: UnknownTableException o2, 3: UnknownDBException o3),
+ list<FieldSchema> get_fields_with_environment_context(1: string db_name, 2: string table_name, 3:EnvironmentContext environment_context) throws (1: MetaException o1, 2: UnknownTableException o2, 3: UnknownDBException o3)
+
+ // Gets a list of FieldSchemas describing both the columns and the partition keys of a particular table
+ list<FieldSchema> get_schema(1: string db_name, 2: string table_name) throws (1: MetaException o1, 2: UnknownTableException o2, 3: UnknownDBException o3)
+ list<FieldSchema> get_schema_with_environment_context(1: string db_name, 2: string table_name, 3:EnvironmentContext environment_context) throws (1: MetaException o1, 2: UnknownTableException o2, 3: UnknownDBException o3)
+
+ // create a Hive table. Following fields must be set
+ // tableName
+ // database (only 'default' for now until Hive QL supports databases)
+ // owner (not needed, but good to have for tracking purposes)
+ // sd.cols (list of field schemas)
+ // sd.inputFormat (SequenceFileInputFormat (binary like falcon tables or u_full) or TextInputFormat)
+ // sd.outputFormat (SequenceFileInputFormat (binary) or TextInputFormat)
+ // sd.serdeInfo.serializationLib (SerDe class name eg org.apache.hadoop.hive.serde.simple_meta.MetadataTypedColumnsetSerDe
+ // * See notes on DDL_TIME
+ void create_table(1:Table tbl) throws(1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3:MetaException o3, 4:NoSuchObjectException o4)
+ void create_table_with_environment_context(1:Table tbl,
+ 2:EnvironmentContext environment_context)
+ throws (1:AlreadyExistsException o1,
+ 2:InvalidObjectException o2, 3:MetaException o3,
+ 4:NoSuchObjectException o4)
+ void create_table_with_constraints(1:Table tbl, 2: list<SQLPrimaryKey> primaryKeys, 3: list<SQLForeignKey> foreignKeys,
+ 4: list<SQLUniqueConstraint> uniqueConstraints, 5: list<SQLNotNullConstraint> notNullConstraints,
+ 6: list<SQLDefaultConstraint> defaultConstraints, 7: list<SQLCheckConstraint> checkConstraints)
+ throws (1:AlreadyExistsException o1,
+ 2:InvalidObjectException o2, 3:MetaException o3,
+ 4:NoSuchObjectException o4)
+ void drop_constraint(1:DropConstraintRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o3)
+ void add_primary_key(1:AddPrimaryKeyRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void add_foreign_key(1:AddForeignKeyRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void add_unique_constraint(1:AddUniqueConstraintRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void add_not_null_constraint(1:AddNotNullConstraintRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void add_default_constraint(1:AddDefaultConstraintRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void add_check_constraint(1:AddCheckConstraintRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ // drops the table and all the partitions associated with it if the table has partitions
+ // delete data (including partitions) if deleteData is set to true
+ void drop_table(1:string dbname, 2:string name, 3:bool deleteData)
+ throws(1:NoSuchObjectException o1, 2:MetaException o3)
+ void drop_table_with_environment_context(1:string dbname, 2:string name, 3:bool deleteData,
+ 4:EnvironmentContext environment_context)
+ throws(1:NoSuchObjectException o1, 2:MetaException o3)
+ void truncate_table(1:string dbName, 2:string tableName, 3:list<string> partNames)
+ throws(1:MetaException o1)
+ list<string> get_tables(1: string db_name, 2: string pattern) throws (1: MetaException o1)
+ list<string> get_tables_by_type(1: string db_name, 2: string pattern, 3: string tableType) throws (1: MetaException o1)
+ list<string> get_materialized_views_for_rewriting(1: string db_name) throws (1: MetaException o1)
+ list<TableMeta> get_table_meta(1: string db_patterns, 2: string tbl_patterns, 3: list<string> tbl_types)
+ throws (1: MetaException o1)
+ list<string> get_all_tables(1: string db_name) throws (1: MetaException o1)
+
+ Table get_table(1:string dbname, 2:string tbl_name)
+ throws (1:MetaException o1, 2:NoSuchObjectException o2)
+ list<Table> get_table_objects_by_name(1:string dbname, 2:list<string> tbl_names)
+ GetTableResult get_table_req(1:GetTableRequest req) throws (1:MetaException o1, 2:NoSuchObjectException o2)
+ GetTablesResult get_table_objects_by_name_req(1:GetTablesRequest req)
+ throws (1:MetaException o1, 2:InvalidOperationException o2, 3:UnknownDBException o3)
+ map<string, Materialization> get_materialization_invalidation_info(1:string dbname, 2:list<string> tbl_names)
+ throws (1:MetaException o1, 2:InvalidOperationException o2, 3:UnknownDBException o3)
+ void update_creation_metadata(1: string catName, 2:string dbname, 3:string tbl_name, 4:CreationMetadata creation_metadata)
+ throws (1:MetaException o1, 2:InvalidOperationException o2, 3:UnknownDBException o3)
+
+ // Get a list of table names that match a filter.
+ // The filter operators are LIKE, <, <=, >, >=, =, <>
+ //
+ // In the filter statement, values interpreted as strings must be enclosed in quotes,
+ // while values interpreted as integers should not be. Strings and integers are the only
+ // supported value types.
+ //
+ // The currently supported key names in the filter are:
+ // Constants.HIVE_FILTER_FIELD_OWNER, which filters on the tables' owner's name
+ // and supports all filter operators
+ // Constants.HIVE_FILTER_FIELD_LAST_ACCESS, which filters on the last access times
+ // and supports all filter operators except LIKE
+ // Constants.HIVE_FILTER_FIELD_PARAMS, which filters on the tables' parameter keys and values
+ // and only supports the filter operators = and <>.
+ // Append the parameter key name to HIVE_FILTER_FIELD_PARAMS in the filter statement.
+ // For example, to filter on parameter keys called "retention", the key name in the filter
+ // statement should be Constants.HIVE_FILTER_FIELD_PARAMS + "retention"
+ // Also, = and <> only work for keys that exist
+ // in the tables. E.g., if you are looking for tables where key1 <> value, it will only
+ // look at tables that have a value for the parameter key1.
+ // Some example filter statements include:
+ // filter = Constants.HIVE_FILTER_FIELD_OWNER + " like \".*test.*\" and " +
+ // Constants.HIVE_FILTER_FIELD_LAST_ACCESS + " = 0";
+ // filter = Constants.HIVE_FILTER_FIELD_PARAMS + "retention = \"30\" or " +
+ // Constants.HIVE_FILTER_FIELD_PARAMS + "retention = \"90\""
+ // @param dbName
+ // The name of the database from which you will retrieve the table names
+ // @param filterType
+ // The type of filter
+ // @param filter
+ // The filter string
+ // @param max_tables
+ // The maximum number of tables returned
+ // @return A list of table names that match the desired filter
+ list<string> get_table_names_by_filter(1:string dbname, 2:string filter, 3:i16 max_tables=-1)
+ throws (1:MetaException o1, 2:InvalidOperationException o2, 3:UnknownDBException o3)
+
+ // alter table applies to only future partitions not for existing partitions
+ // * See notes on DDL_TIME
+ void alter_table(1:string dbname, 2:string tbl_name, 3:Table new_tbl)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+ void alter_table_with_environment_context(1:string dbname, 2:string tbl_name,
+ 3:Table new_tbl, 4:EnvironmentContext environment_context)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+ // alter table not only applies to future partitions but also cascade to existing partitions
+ void alter_table_with_cascade(1:string dbname, 2:string tbl_name, 3:Table new_tbl, 4:bool cascade)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+ // the following applies to only tables that have partitions
+ // * See notes on DDL_TIME
+ Partition add_partition(1:Partition new_part)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition add_partition_with_environment_context(1:Partition new_part,
+ 2:EnvironmentContext environment_context)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2,
+ 3:MetaException o3)
+ i32 add_partitions(1:list<Partition> new_parts)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ i32 add_partitions_pspec(1:list<PartitionSpec> new_parts)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition append_partition(1:string db_name, 2:string tbl_name, 3:list<string> part_vals)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ AddPartitionsResult add_partitions_req(1:AddPartitionsRequest request)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition append_partition_with_environment_context(1:string db_name, 2:string tbl_name,
+ 3:list<string> part_vals, 4:EnvironmentContext environment_context)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition append_partition_by_name(1:string db_name, 2:string tbl_name, 3:string part_name)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition append_partition_by_name_with_environment_context(1:string db_name, 2:string tbl_name,
+ 3:string part_name, 4:EnvironmentContext environment_context)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ bool drop_partition(1:string db_name, 2:string tbl_name, 3:list<string> part_vals, 4:bool deleteData)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ bool drop_partition_with_environment_context(1:string db_name, 2:string tbl_name,
+ 3:list<string> part_vals, 4:bool deleteData, 5:EnvironmentContext environment_context)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ bool drop_partition_by_name(1:string db_name, 2:string tbl_name, 3:string part_name, 4:bool deleteData)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ bool drop_partition_by_name_with_environment_context(1:string db_name, 2:string tbl_name,
+ 3:string part_name, 4:bool deleteData, 5:EnvironmentContext environment_context)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ DropPartitionsResult drop_partitions_req(1: DropPartitionsRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ Partition get_partition(1:string db_name, 2:string tbl_name, 3:list<string> part_vals)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ Partition exchange_partition(1:map<string, string> partitionSpecs, 2:string source_db,
+ 3:string source_table_name, 4:string dest_db, 5:string dest_table_name)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3,
+ 4:InvalidInputException o4)
+
+ list<Partition> exchange_partitions(1:map<string, string> partitionSpecs, 2:string source_db,
+ 3:string source_table_name, 4:string dest_db, 5:string dest_table_name)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3,
+ 4:InvalidInputException o4)
+
+ Partition get_partition_with_auth(1:string db_name, 2:string tbl_name, 3:list<string> part_vals,
+ 4: string user_name, 5: list<string> group_names) throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ Partition get_partition_by_name(1:string db_name 2:string tbl_name, 3:string part_name)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // returns all the partitions for this table in reverse chronological order.
+ // If max parts is given then it will return only that many.
+ list<Partition> get_partitions(1:string db_name, 2:string tbl_name, 3:i16 max_parts=-1)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ list<Partition> get_partitions_with_auth(1:string db_name, 2:string tbl_name, 3:i16 max_parts=-1,
+ 4: string user_name, 5: list<string> group_names) throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ list<PartitionSpec> get_partitions_pspec(1:string db_name, 2:string tbl_name, 3:i32 max_parts=-1)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ list<string> get_partition_names(1:string db_name, 2:string tbl_name, 3:i16 max_parts=-1)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ PartitionValuesResponse get_partition_values(1:PartitionValuesRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2);
+
+ // get_partition*_ps methods allow filtering by a partial partition specification,
+ // as needed for dynamic partitions. The values that are not restricted should
+ // be empty strings. Nulls were considered (instead of "") but caused errors in
+ // generated Python code. The size of part_vals may be smaller than the
+ // number of partition columns - the unspecified values are considered the same
+ // as "".
+ list<Partition> get_partitions_ps(1:string db_name 2:string tbl_name
+ 3:list<string> part_vals, 4:i16 max_parts=-1)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ list<Partition> get_partitions_ps_with_auth(1:string db_name, 2:string tbl_name, 3:list<string> part_vals, 4:i16 max_parts=-1,
+ 5: string user_name, 6: list<string> group_names) throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ list<string> get_partition_names_ps(1:string db_name,
+ 2:string tbl_name, 3:list<string> part_vals, 4:i16 max_parts=-1)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // get the partitions matching the given partition filter
+ list<Partition> get_partitions_by_filter(1:string db_name 2:string tbl_name
+ 3:string filter, 4:i16 max_parts=-1)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // List partitions as PartitionSpec instances.
+ list<PartitionSpec> get_part_specs_by_filter(1:string db_name 2:string tbl_name
+ 3:string filter, 4:i32 max_parts=-1)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // get the partitions matching the given partition filter
+ // unlike get_partitions_by_filter, takes serialized hive expression, and with that can work
+ // with any filter (get_partitions_by_filter only works if the filter can be pushed down to JDOQL.
+ PartitionsByExprResult get_partitions_by_expr(1:PartitionsByExprRequest req)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // get the partitions matching the given partition filter
+ i32 get_num_partitions_by_filter(1:string db_name 2:string tbl_name 3:string filter)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // get partitions give a list of partition names
+ list<Partition> get_partitions_by_names(1:string db_name 2:string tbl_name 3:list<string> names)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // changes the partition to the new partition object. partition is identified from the part values
+ // in the new_part
+ // * See notes on DDL_TIME
+ void alter_partition(1:string db_name, 2:string tbl_name, 3:Partition new_part)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ // change a list of partitions. All partitions are altered atomically and all
+ // prehooks are fired together followed by all post hooks
+ void alter_partitions(1:string db_name, 2:string tbl_name, 3:list<Partition> new_parts)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
++
+ void alter_partitions_with_environment_context(1:string db_name, 2:string tbl_name, 3:list<Partition> new_parts, 4:EnvironmentContext environment_context) throws (1:InvalidOperationException o1, 2:MetaException o2)
+
++ AlterPartitionsResponse alter_partitions_with_environment_context_req(1:AlterPartitionsRequest req)
++ throws (1:InvalidOperationException o1, 2:MetaException o2)
++
+ void alter_partition_with_environment_context(1:string db_name,
+ 2:string tbl_name, 3:Partition new_part,
+ 4:EnvironmentContext environment_context)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ // rename the old partition to the new partition object by changing old part values to the part values
+ // in the new_part. old partition is identified from part_vals.
+ // partition keys in new_part should be the same as those in old partition.
+ void rename_partition(1:string db_name, 2:string tbl_name, 3:list<string> part_vals, 4:Partition new_part)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ // returns whether or not the partition name is valid based on the value of the config
+ // hive.metastore.partition.name.whitelist.pattern
+ bool partition_name_has_valid_characters(1:list<string> part_vals, 2:bool throw_exception)
+ throws(1: MetaException o1)
+
+ // gets the value of the configuration key in the metastore server. returns
+ // defaultValue if the key does not exist. if the configuration key does not
+ // begin with "hive", "mapred", or "hdfs", a ConfigValSecurityException is
+ // thrown.
+ string get_config_value(1:string name, 2:string defaultValue)
+ throws(1:ConfigValSecurityException o1)
+
+ // converts a partition name into a partition values array
+ list<string> partition_name_to_vals(1: string part_name)
+ throws(1: MetaException o1)
+ // converts a partition name into a partition specification (a mapping from
+ // the partition cols to the values)
+ map<string, string> partition_name_to_spec(1: string part_name)
+ throws(1: MetaException o1)
+
+ void markPartitionForEvent(1:string db_name, 2:string tbl_name, 3:map<string,string> part_vals,
+ 4:PartitionEventType eventType) throws (1: MetaException o1, 2: NoSuchObjectException o2,
+ 3: UnknownDBException o3, 4: UnknownTableException o4, 5: UnknownPartitionException o5,
+ 6: InvalidPartitionException o6)
+ bool isPartitionMarkedForEvent(1:string db_name, 2:string tbl_name, 3:map<string,string> part_vals,
+ 4: PartitionEventType eventType) throws (1: MetaException o1, 2:NoSuchObjectException o2,
+ 3: UnknownDBException o3, 4: UnknownTableException o4, 5: UnknownPartitionException o5,
+ 6: InvalidPartitionException o6)
+
+ //primary keys and foreign keys
+ PrimaryKeysResponse get_primary_keys(1:PrimaryKeysRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ ForeignKeysResponse get_foreign_keys(1:ForeignKeysRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ // other constraints
+ UniqueConstraintsResponse get_unique_constraints(1:UniqueConstraintsRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ NotNullConstraintsResponse get_not_null_constraints(1:NotNullConstraintsRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ DefaultConstraintsResponse get_default_constraints(1:DefaultConstraintsRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ CheckConstraintsResponse get_check_constraints(1:CheckConstraintsRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // column statistics interfaces
+
+ // update APIs persist the column statistics object(s) that are passed in. If statistics already
+ // exists for one or more columns, the existing statistics will be overwritten. The update APIs
+ // validate that the dbName, tableName, partName, colName[] passed in as part of the ColumnStatistics
+ // struct are valid, throws InvalidInputException/NoSuchObjectException if found to be invalid
+ bool update_table_column_statistics(1:ColumnStatistics stats_obj) throws (1:NoSuchObjectException o1,
+ 2:InvalidObjectException o2, 3:MetaException o3, 4:InvalidInputException o4)
+ bool update_partition_column_statistics(1:ColumnStatistics stats_obj) throws (1:NoSuchObjectException o1,
+ 2:InvalidObjectException o2, 3:MetaException o3, 4:InvalidInputException o4)
+
+ // get APIs return the column statistics corresponding to db_name, tbl_name, [part_name], col_name if
+ // such statistics exists. If the required statistics doesn't exist, get APIs throw NoSuchObjectException
+ // For instance, if get_table_column_statistics is called on a partitioned table for which only
+ // partition level column stats exist, get_table_column_statistics will throw NoSuchObjectException
+ ColumnStatistics get_table_column_statistics(1:string db_name, 2:string tbl_name, 3:string col_name) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2, 3:InvalidInputException o3, 4:InvalidObjectException o4)
+ ColumnStatistics get_partition_column_statistics(1:string db_name, 2:string tbl_name, 3:string part_name,
+ 4:string col_name) throws (1:NoSuchObjectException o1, 2:MetaException o2,
+ 3:InvalidInputException o3, 4:InvalidObjectException o4)
+ TableStatsResult get_table_statistics_req(1:TableStatsRequest request) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2)
+ PartitionsStatsResult get_partitions_statistics_req(1:PartitionsStatsRequest request) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2)
+ AggrStats get_aggr_stats_for(1:PartitionsStatsRequest request) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2)
+ bool set_aggr_stats_for(1:SetPartitionsStatsRequest request) throws
+ (1:NoSuchObjectException o1, 2:InvalidObjectException o2, 3:MetaException o3, 4:InvalidInputException o4)
+
+
+ // delete APIs attempt to delete column statistics, if found, associated with a given db_name, tbl_name, [part_name]
+ // and col_name. If the delete API doesn't find the statistics record in the metastore, throws NoSuchObjectException
+ // Delete API validates the input and if the input is invalid throws InvalidInputException/InvalidObjectException.
+ bool delete_partition_column_statistics(1:string db_name, 2:string tbl_name, 3:string part_name, 4:string col_name) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2, 3:InvalidObjectException o3,
+ 4:InvalidInputException o4)
+ bool delete_table_column_statistics(1:string db_name, 2:string tbl_name, 3:string col_name) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2, 3:InvalidObjectException o3,
+ 4:InvalidInputException o4)
+
+ //
+ // user-defined functions
+ //
+
+ void create_function(1:Function func)
+ throws (1:AlreadyExistsException o1,
+ 2:InvalidObjectException o2,
+ 3:MetaException o3,
+ 4:NoSuchObjectException o4)
+
+ void drop_function(1:string dbName, 2:string funcName)
+ throws (1:NoSuchObjectException o1, 2:MetaException o3)
+
+ void alter_function(1:string dbName, 2:string funcName, 3:Function newFunc)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ list<string> get_functions(1:string dbName, 2:string pattern)
+ throws (1:MetaException o1)
+ Function get_function(1:string dbName, 2:string funcName)
+ throws (1:MetaException o1, 2:NoSuchObjectException o2)
+
+ GetAllFunctionsResponse get_all_functions() throws (1:MetaException o1)
+
+ //authorization privileges
+
+ bool create_role(1:Role role) throws(1:MetaException o1)
+ bool drop_role(1:string role_name) throws(1:MetaException o1)
+ list<string> get_role_names() throws(1:MetaException o1)
+ // Deprecated, use grant_revoke_role()
+ bool grant_role(1:string role_name, 2:string principal_name, 3:PrincipalType principal_type,
+ 4:string grantor, 5:PrincipalType grantorType, 6:bool grant_option) throws(1:MetaException o1)
+ // Deprecated, use grant_revoke_role()
+ bool revoke_role(1:string role_name, 2:string principal_name, 3:PrincipalType principal_type)
+ throws(1:MetaException o1)
+ list<Role> list_roles(1:string principal_name, 2:PrincipalType principal_type) throws(1:MetaException o1)
+ GrantRevokeRoleResponse grant_revoke_role(1:GrantRevokeRoleRequest request) throws(1:MetaException o1)
+
+ // get all role-grants for users/roles that have been granted the given role
+ // Note that in the returned list of RolePrincipalGrants, the roleName is
+ // redundant as it would match the role_name argument of this function
+ GetPrincipalsInRoleResponse get_principals_in_role(1: GetPrincipalsInRoleRequest request) throws(1:MetaException o1)
+
+ // get grant information of all roles granted to the given principal
+ // Note that in the returned list of RolePrincipalGrants, the principal name,type is
+ // redundant as it would match the principal name,type arguments of this function
+ GetRoleGrantsForPrincipalResponse get_role_grants_for_principal(1: GetRoleGrantsForPrincipalRequest request) throws(1:MetaException o1)
+
+ PrincipalPrivilegeSet get_privilege_set(1:HiveObjectRef hiveObject, 2:string user_name,
+ 3: list<string> group_names) throws(1:MetaException o1)
+ list<HiveObjectPrivilege> list_privileges(1:string principal_name, 2:PrincipalType principal_type,
+ 3: HiveObjectRef hiveObject) throws(1:MetaException o1)
+
+ // Deprecated, use grant_revoke_privileges()
+ bool grant_privileges(1:PrivilegeBag privileges) throws(1:MetaException o1)
+ // Deprecated, use grant_revoke_privileges()
+ bool revoke_privileges(1:PrivilegeBag privileges) throws(1:MetaException o1)
+ GrantRevokePrivilegeResponse grant_revoke_privileges(1:GrantRevokePrivilegeRequest request) throws(1:MetaException o1);
+ // Revokes all privileges for the object and adds the newly granted privileges for it.
+ GrantRevokePrivilegeResponse refresh_privileges(1:HiveObjectRef objToRefresh, 2:string authorizer, 3:GrantRevokePrivilegeRequest grantRequest) throws(1:MetaException o1);
+
+ // this is used by metastore client to send UGI information to metastore server immediately
+ // after setting up a connection.
+ list<string> set_ugi(1:string user_name, 2:list<string> group_names) throws (1:MetaException o1)
+
+ //Authentication (delegation token) interfaces
+
+ // get metastore server delegation token for use from the map/reduce tasks to authenticate
+ // to metastore server
+ string get_delegation_token(1:string token_owner, 2:string renewer_kerberos_principal_name)
+ throws (1:MetaException o1)
+
+ // method to renew delegation token obtained from metastore server
+ i64 renew_delegation_token(1:string token_str_form) throws (1:MetaException o1)
+
+ // method to cancel delegation token obtained from metastore server
+ void cancel_delegation_token(1:string token_str_form) throws (1:MetaException o1)
+
+ // add a delegation token
+ bool add_token(1:string token_identifier, 2:string delegation_token)
+
+ // remove a delegation token
+ bool remove_token(1:string token_identifier)
+
+ // get a delegation token by identifier
+ string get_token(1:string token_identifier)
+
+ // get all delegation token identifiers
+ list<string> get_all_token_identifiers()
+
+ // add master key
+ i32 add_master_key(1:string key) throws (1:MetaException o1)
+
+ // update master key
+ void update_master_key(1:i32 seq_number, 2:string key) throws (1:NoSuchObjectException o1, 2:MetaException o2)
+
+ // remove master key
+ bool remove_master_key(1:i32 key_seq)
+
+ // get master keys
+ list<string> get_master_keys()
+
+ // Transaction and lock management calls
+ // Get just list of open transactions
+ GetOpenTxnsResponse get_open_txns()
+ // Get list of open transactions with state (open, aborted)
+ GetOpenTxnsInfoResponse get_open_txns_info()
+ OpenTxnsResponse open_txns(1:OpenTxnRequest rqst)
+ void abort_txn(1:AbortTxnRequest rqst) throws (1:NoSuchTxnException o1)
+ void abort_txns(1:AbortTxnsRequest rqst) throws (1:NoSuchTxnException o1)
+ void commit_txn(1:CommitTxnRequest rqst) throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2)
+ void repl_tbl_writeid_state(1: ReplTblWriteIdStateRequest rqst)
+ GetValidWriteIdsResponse get_valid_write_ids(1:GetValidWriteIdsRequest rqst)
+ throws (1:NoSuchTxnException o1, 2:MetaException o2)
+ AllocateTableWriteIdsResponse allocate_table_write_ids(1:AllocateTableWriteIdsRequest rqst)
+ throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2, 3:MetaException o3)
+ LockResponse lock(1:LockRequest rqst) throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2)
+ LockResponse check_lock(1:CheckLockRequest rqst)
+ throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2, 3:NoSuchLockException o3)
+ void unlock(1:UnlockRequest rqst) throws (1:NoSuchLockException o1, 2:TxnOpenException o2)
+ ShowLocksResponse show_locks(1:ShowLocksRequest rqst)
+ void heartbeat(1:HeartbeatRequest ids) throws (1:NoSuchLockException o1, 2:NoSuchTxnException o2, 3:TxnAbortedException o3)
+ HeartbeatTxnRangeResponse heartbeat_txn_range(1:HeartbeatTxnRangeRequest txns)
+ void compact(1:CompactionRequest rqst)
+ CompactionResponse compact2(1:CompactionRequest rqst)
+ ShowCompactResponse show_compact(1:ShowCompactRequest rqst)
+ void add_dynamic_partitions(1:AddDynamicPartitions rqst) throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2)
+
+ // Notification logging calls
+ NotificationEventResponse get_next_notification(1:NotificationEventRequest rqst)
+ CurrentNotificationEventId get_current_notificationEventId()
+ NotificationEventsCountResponse get_notification_events_count(1:NotificationEventsCountRequest rqst)
+ FireEventResponse fire_listener_event(1:FireEventRequest rqst)
+ void flushCache()
+ WriteNotificationLogResponse add_write_notification_log(WriteNotificationLogRequest rqst)
+
+ // Repl Change Management api
+ CmRecycleResponse cm_recycle(1:CmRecycleRequest request) throws(1:MetaException o1)
+
+ GetFileMetadataByExprResult get_file_metadata_by_expr(1:GetFileMetadataByExprRequest req)
+ GetFileMetadataResult get_file_metadata(1:GetFileMetadataRequest req)
+ PutFileMetadataResult put_file_metadata(1:PutFileMetadataRequest req)
+ ClearFileMetadataResult clear_file_metadata(1:ClearFileMetadataRequest req)
+ CacheFileMetadataResult cache_file_metadata(1:CacheFileMetadataRequest req)
+
+ // Metastore DB properties
+ string get_metastore_db_uuid() throws (1:MetaException o1)
+
+ // Workload management API's
+ WMCreateResourcePlanResponse create_resource_plan(1:WMCreateResourcePlanRequest request)
+ throws(1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3:MetaException o3)
+
+ WMGetResourcePlanResponse get_resource_plan(1:WMGetResourcePlanRequest request)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ WMGetActiveResourcePlanResponse get_active_resource_plan(1:WMGetActiveResourcePlanRequest request)
+ throws(1:MetaException o2)
+
+ WMGetAllResourcePlanResponse get_all_resource_plans(1:WMGetAllResourcePlanRequest request)
+ throws(1:MetaException o1)
+
+ WMAlterResourcePlanResponse alter_resource_plan(1:WMAlterResourcePlanRequest request)
+ throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+
+ WMValidateResourcePlanResponse validate_resource_plan(1:WMValidateResourcePlanRequest request)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ WMDropResourcePlanResponse drop_resource_plan(1:WMDropResourcePlanRequest request)
+ throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+
+ WMCreateTriggerResponse create_wm_trigger(1:WMCreateTriggerRequest request)
+ throws(1:AlreadyExistsException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3, 4:MetaException o4)
+
+ WMAlterTriggerResponse alter_wm_trigger(1:WMAlterTriggerRequest request)
+ throws(1:NoSuchObjectException o1, 2:InvalidObjectException o2, 3:MetaException o3)
+
+ WMDropTriggerResponse drop_wm_trigger(1:WMDropTriggerRequest request)
+ throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+
+ WMGetTriggersForResourePlanResponse get_triggers_for_resourceplan(1:WMGetTriggersForResourePlanRequest request)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ WMCreatePoolResponse create_wm_pool(1:WMCreatePoolRequest request)
+ throws(1:AlreadyExistsException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3, 4:MetaException o4)
+
+ WMAlterPoolResponse alter_wm_pool(1:WMAlterPoolRequest request)
+ throws(1:AlreadyExistsException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3, 4:MetaException o4)
+
+ WMDropPoolResponse drop_wm_pool(1:WMDropPoolRequest request)
+ throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+
+ WMCreateOrUpdateMappingResponse create_or_update_wm_mapping(1:WMCreateOrUpdateMappingRequest request)
+ throws(1:AlreadyExistsException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3, 4:MetaException o4)
+
+ WMDropMappingResponse drop_wm_mapping(1:WMDropMappingRequest request)
+ throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+
+ WMCreateOrDropTriggerToPoolMappingResponse create_or_drop_wm_trigger_to_pool_mapping(1:WMCreateOrDropTriggerToPoolMappingRequest request)
+ throws(1:AlreadyExistsException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3, 4:MetaException o4)
+
+ // Schema calls
+ void create_ischema(1:ISchema schema) throws(1:AlreadyExistsException o1,
+ NoSuchObjectException o2, 3:MetaException o3)
+ void alter_ischema(1:AlterISchemaRequest rqst)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ ISchema get_ischema(1:ISchemaName name) throws (1:NoSuchObjectException o1, 2:MetaException o2)
+ void drop_ischema(1:ISchemaName name)
+ throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+
+ void add_schema_version(1:SchemaVersion schemaVersion)
+ throws(1:AlreadyExistsException o1, 2:NoSuchObjectException o2, 3:MetaException o3)
+ SchemaVersion get_schema_version(1: SchemaVersionDescriptor schemaVersion)
+ throws (1:NoSuchObjectException o1, 2:MetaException o2)
+ SchemaVersion get_schema_latest_version(1: ISchemaName schemaName)
+ throws (1:NoSuchObjectException o1, 2:MetaException o2)
+ list<SchemaVersion> get_schema_all_versions(1: ISchemaName schemaName)
+ throws (1:NoSuchObjectException o1, 2:MetaException o2)
+ void drop_schema_version(1: SchemaVersionDescriptor schemaVersion)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ FindSchemasByColsResp get_schemas_by_cols(1: FindSchemasByColsRqst rqst)
+ throws(1:MetaException o1)
+ // There is no blanket update of SchemaVersion since it is (mostly) immutable. The only
+ // updates are the specific ones to associate a version with a serde and to change its state
+ void map_schema_version_to_serde(1: MapSchemaVersionToSerdeRequest rqst)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void set_schema_version_state(1: SetSchemaVersionStateRequest rqst)
+ throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+
+ void add_serde(1: SerDeInfo serde) throws(1:AlreadyExistsException o1, 2:MetaException o2)
+ SerDeInfo get_serde(1: GetSerdeRequest rqst) throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ LockResponse get_lock_materialization_rebuild(1: string dbName, 2: string tableName, 3: i64 txnId)
+ bool heartbeat_lock_materialization_rebuild(1: string dbName, 2: string tableName, 3: i64 txnId)
+
+ void add_runtime_stats(1: RuntimeStat stat) throws(1:MetaException o1)
+ list<RuntimeStat> get_runtime_stats(1: GetRuntimeStatsRequest rqst) throws(1:MetaException o1)
+ }
+
+ // * Note about the DDL_TIME: When creating or altering a table or a partition,
+ // if the DDL_TIME is not set, the current time will be used.
+
+ // For storing info about archived partitions in parameters
+
+ // Whether the partition is archived
+ const string IS_ARCHIVED = "is_archived",
+ // The original location of the partition, before archiving. After archiving,
+ // this directory will contain the archive. When the partition
+ // is dropped, this directory will be deleted
+ const string ORIGINAL_LOCATION = "original_location",
+
+ // Whether or not the table is considered immutable - immutable tables can only be
+ // overwritten or created if unpartitioned, or if partitioned, partitions inside them
+ // can only be overwritt
<TRUNCATED>