// 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. // Coding Conventions for this file: // // Structs/Enums/Unions // * Struct, Enum, and Union names begin with a "T", // and use a capital letter for each new word, with no underscores. // * All fields should be declared as either optional or required. // // Functions // * Function names start with a capital letter and have a capital letter for // each new word, with no underscores. // * Each function should take exactly one parameter, named TFunctionNameReq, // and should return either void or TFunctionNameResp. This convention allows // incremental updates. // // Services // * Service names begin with the letter "T", use a capital letter for each // new word (with no underscores), and end with the word "Service". namespace java org.apache.hive.service.rpc.thrift namespace cpp apache.hive.service.rpc.thrift // List of protocol versions. A new token should be // added to the end of this list every time a change is made. enum TProtocolVersion { HIVE_CLI_SERVICE_PROTOCOL_V1, // V2 adds support for asynchronous execution HIVE_CLI_SERVICE_PROTOCOL_V2 // V3 add varchar type, primitive type qualifiers HIVE_CLI_SERVICE_PROTOCOL_V3 // V4 add decimal precision/scale, char type HIVE_CLI_SERVICE_PROTOCOL_V4 // V5 adds error details when GetOperationStatus returns in error state HIVE_CLI_SERVICE_PROTOCOL_V5 // V6 uses binary type for binary payload (was string) and uses columnar result set HIVE_CLI_SERVICE_PROTOCOL_V6 // V7 adds support for delegation token based connection HIVE_CLI_SERVICE_PROTOCOL_V7 // V8 adds support for interval types HIVE_CLI_SERVICE_PROTOCOL_V8 // V9 adds support for serializing ResultSets in SerDe HIVE_CLI_SERVICE_PROTOCOL_V9 // V10 adds support for in place updates via GetOperationStatus HIVE_CLI_SERVICE_PROTOCOL_V10 // V11 adds timestamp with local time zone type HIVE_CLI_SERVICE_PROTOCOL_V11 } enum TTypeId { BOOLEAN_TYPE, TINYINT_TYPE, SMALLINT_TYPE, INT_TYPE, BIGINT_TYPE, FLOAT_TYPE, DOUBLE_TYPE, STRING_TYPE, TIMESTAMP_TYPE, BINARY_TYPE, ARRAY_TYPE, MAP_TYPE, STRUCT_TYPE, UNION_TYPE, USER_DEFINED_TYPE, DECIMAL_TYPE, NULL_TYPE, DATE_TYPE, VARCHAR_TYPE, CHAR_TYPE, INTERVAL_YEAR_MONTH_TYPE, INTERVAL_DAY_TIME_TYPE, TIMESTAMPLOCALTZ_TYPE } const set PRIMITIVE_TYPES = [ TTypeId.BOOLEAN_TYPE, TTypeId.TINYINT_TYPE, TTypeId.SMALLINT_TYPE, TTypeId.INT_TYPE, TTypeId.BIGINT_TYPE, TTypeId.FLOAT_TYPE, TTypeId.DOUBLE_TYPE, TTypeId.STRING_TYPE, TTypeId.TIMESTAMP_TYPE, TTypeId.BINARY_TYPE, TTypeId.DECIMAL_TYPE, TTypeId.NULL_TYPE, TTypeId.DATE_TYPE, TTypeId.VARCHAR_TYPE, TTypeId.CHAR_TYPE, TTypeId.INTERVAL_YEAR_MONTH_TYPE, TTypeId.INTERVAL_DAY_TIME_TYPE, TTypeId.TIMESTAMPLOCALTZ_TYPE ] const set COMPLEX_TYPES = [ TTypeId.ARRAY_TYPE TTypeId.MAP_TYPE TTypeId.STRUCT_TYPE TTypeId.UNION_TYPE TTypeId.USER_DEFINED_TYPE ] const set COLLECTION_TYPES = [ TTypeId.ARRAY_TYPE TTypeId.MAP_TYPE ] const map TYPE_NAMES = { TTypeId.BOOLEAN_TYPE: "BOOLEAN", TTypeId.TINYINT_TYPE: "TINYINT", TTypeId.SMALLINT_TYPE: "SMALLINT", TTypeId.INT_TYPE: "INT", TTypeId.BIGINT_TYPE: "BIGINT", TTypeId.FLOAT_TYPE: "FLOAT", TTypeId.DOUBLE_TYPE: "DOUBLE", TTypeId.STRING_TYPE: "STRING", TTypeId.TIMESTAMP_TYPE: "TIMESTAMP", TTypeId.BINARY_TYPE: "BINARY", TTypeId.ARRAY_TYPE: "ARRAY", TTypeId.MAP_TYPE: "MAP", TTypeId.STRUCT_TYPE: "STRUCT", TTypeId.UNION_TYPE: "UNIONTYPE", TTypeId.DECIMAL_TYPE: "DECIMAL", TTypeId.NULL_TYPE: "NULL" TTypeId.DATE_TYPE: "DATE" TTypeId.VARCHAR_TYPE: "VARCHAR" TTypeId.CHAR_TYPE: "CHAR" TTypeId.INTERVAL_YEAR_MONTH_TYPE: "INTERVAL_YEAR_MONTH" TTypeId.INTERVAL_DAY_TIME_TYPE: "INTERVAL_DAY_TIME" TTypeId.TIMESTAMPLOCALTZ_TYPE: "TIMESTAMP WITH LOCAL TIME ZONE" } // Thrift does not support recursively defined types or forward declarations, // which makes it difficult to represent Hive's nested types. // To get around these limitations TTypeDesc employs a type list that maps // integer "pointers" to TTypeEntry objects. The following examples show // how different types are represented using this scheme: // // "INT": // TTypeDesc { // types = [ // TTypeEntry.primitive_entry { // type = INT_TYPE // } // ] // } // // "ARRAY": // TTypeDesc { // types = [ // TTypeEntry.array_entry { // object_type_ptr = 1 // }, // TTypeEntry.primitive_entry { // type = INT_TYPE // } // ] // } // // "MAP": // TTypeDesc { // types = [ // TTypeEntry.map_entry { // key_type_ptr = 1 // value_type_ptr = 2 // }, // TTypeEntry.primitive_entry { // type = INT_TYPE // }, // TTypeEntry.primitive_entry { // type = STRING_TYPE // } // ] // } typedef i32 TTypeEntryPtr // Valid TTypeQualifiers key names const string CHARACTER_MAXIMUM_LENGTH = "characterMaximumLength" // Type qualifier key name for decimal const string PRECISION = "precision" const string SCALE = "scale" union TTypeQualifierValue { 1: optional i32 i32Value 2: optional string stringValue } // Type qualifiers for primitive type. struct TTypeQualifiers { 1: required map qualifiers } // Type entry for a primitive type. struct TPrimitiveTypeEntry { // The primitive type token. This must satisfy the condition // that type is in the PRIMITIVE_TYPES set. 1: required TTypeId type 2: optional TTypeQualifiers typeQualifiers } // Type entry for an ARRAY type. struct TArrayTypeEntry { 1: required TTypeEntryPtr objectTypePtr } // Type entry for a MAP type. struct TMapTypeEntry { 1: required TTypeEntryPtr keyTypePtr 2: required TTypeEntryPtr valueTypePtr } // Type entry for a STRUCT type. struct TStructTypeEntry { 1: required map nameToTypePtr } // Type entry for a UNIONTYPE type. struct TUnionTypeEntry { 1: required map nameToTypePtr } struct TUserDefinedTypeEntry { // The fully qualified name of the class implementing this type. 1: required string typeClassName } // We use a union here since Thrift does not support inheritance. union TTypeEntry { 1: TPrimitiveTypeEntry primitiveEntry 2: TArrayTypeEntry arrayEntry 3: TMapTypeEntry mapEntry 4: TStructTypeEntry structEntry 5: TUnionTypeEntry unionEntry 6: TUserDefinedTypeEntry userDefinedTypeEntry } // Type descriptor for columns. struct TTypeDesc { // The "top" type is always the first element of the list. // If the top type is an ARRAY, MAP, STRUCT, or UNIONTYPE // type, then subsequent elements represent nested types. 1: required list types } // A result set column descriptor. struct TColumnDesc { // The name of the column 1: required string columnName // The type descriptor for this column 2: required TTypeDesc typeDesc // The ordinal position of this column in the schema 3: required i32 position 4: optional string comment } // Metadata used to describe the schema (column names, types, comments) // of result sets. struct TTableSchema { 1: required list columns } // A Boolean column value. struct TBoolValue { // NULL if value is unset. 1: optional bool value } // A Byte column value. struct TByteValue { // NULL if value is unset. 1: optional byte value } // A signed, 16 bit column value. struct TI16Value { // NULL if value is unset 1: optional i16 value } // A signed, 32 bit column value struct TI32Value { // NULL if value is unset 1: optional i32 value } // A signed 64 bit column value struct TI64Value { // NULL if value is unset 1: optional i64 value } // A floating point 64 bit column value struct TDoubleValue { // NULL if value is unset 1: optional double value } struct TStringValue { // NULL if value is unset 1: optional string value } // A single column value in a result set. // Note that Hive's type system is richer than Thrift's, // so in some cases we have to map multiple Hive types // to the same Thrift type. On the client-side this is // disambiguated by looking at the Schema of the // result set. union TColumnValue { 1: TBoolValue boolVal // BOOLEAN 2: TByteValue byteVal // TINYINT 3: TI16Value i16Val // SMALLINT 4: TI32Value i32Val // INT 5: TI64Value i64Val // BIGINT, TIMESTAMP 6: TDoubleValue doubleVal // FLOAT, DOUBLE 7: TStringValue stringVal // STRING, LIST, MAP, STRUCT, UNIONTYPE, BINARY, DECIMAL, NULL, INTERVAL_YEAR_MONTH, INTERVAL_DAY_TIME } // Represents a row in a rowset. struct TRow { 1: required list colVals } struct TBoolColumn { 1: required list values 2: required binary nulls } struct TByteColumn { 1: required list values 2: required binary nulls } struct TI16Column { 1: required list values 2: required binary nulls } struct TI32Column { 1: required list values 2: required binary nulls } struct TI64Column { 1: required list values 2: required binary nulls } struct TDoubleColumn { 1: required list values 2: required binary nulls } struct TStringColumn { 1: required list values 2: required binary nulls } struct TBinaryColumn { 1: required list values 2: required binary nulls } // Note that Hive's type system is richer than Thrift's, // so in some cases we have to map multiple Hive types // to the same Thrift type. On the client-side this is // disambiguated by looking at the Schema of the // result set. union TColumn { 1: TBoolColumn boolVal // BOOLEAN 2: TByteColumn byteVal // TINYINT 3: TI16Column i16Val // SMALLINT 4: TI32Column i32Val // INT 5: TI64Column i64Val // BIGINT, TIMESTAMP 6: TDoubleColumn doubleVal // FLOAT, DOUBLE 7: TStringColumn stringVal // STRING, LIST, MAP, STRUCT, UNIONTYPE, DECIMAL, NULL 8: TBinaryColumn binaryVal // BINARY } // Represents a rowset struct TRowSet { // The starting row offset of this rowset. 1: required i64 startRowOffset 2: required list rows 3: optional list columns 4: optional binary binaryColumns 5: optional i32 columnCount } // The return status code contained in each response. enum TStatusCode { SUCCESS_STATUS, SUCCESS_WITH_INFO_STATUS, STILL_EXECUTING_STATUS, ERROR_STATUS, INVALID_HANDLE_STATUS } // The return status of a remote request struct TStatus { 1: required TStatusCode statusCode // If status is SUCCESS_WITH_INFO, info_msgs may be populated with // additional diagnostic information. 2: optional list infoMessages // If status is ERROR, then the following fields may be set 3: optional string sqlState // as defined in the ISO/IEF CLI specification 4: optional i32 errorCode // internal error code 5: optional string errorMessage } // The state of an operation (i.e. a query or other // asynchronous operation that generates a result set) // on the server. enum TOperationState { // The operation has been initialized INITIALIZED_STATE, // The operation is running. In this state the result // set is not available. RUNNING_STATE, // The operation has completed. When an operation is in // this state its result set may be fetched. FINISHED_STATE, // The operation was canceled by a client CANCELED_STATE, // The operation was closed by a client CLOSED_STATE, // The operation failed due to an error ERROR_STATE, // The operation is in an unrecognized state UKNOWN_STATE, // The operation is in an pending state PENDING_STATE, // The operation is in an timedout state TIMEDOUT_STATE, } // A string identifier. This is interpreted literally. typedef string TIdentifier // A search pattern. // // Valid search pattern characters: // '_': Any single character. // '%': Any sequence of zero or more characters. // '\': Escape character used to include special characters, // e.g. '_', '%', '\'. If a '\' precedes a non-special // character it has no special meaning and is interpreted // literally. typedef string TPattern // A search pattern or identifier. Used as input // parameter for many of the catalog functions. typedef string TPatternOrIdentifier struct THandleIdentifier { // 16 byte globally unique identifier // This is the public ID of the handle and // can be used for reporting. 1: required binary guid, // 16 byte secret generated by the server // and used to verify that the handle is not // being hijacked by another user. 2: required binary secret, } // Client-side handle to persistent // session information on the server-side. struct TSessionHandle { 1: required THandleIdentifier sessionId } // The subtype of an OperationHandle. enum TOperationType { EXECUTE_STATEMENT, GET_TYPE_INFO, GET_CATALOGS, GET_SCHEMAS, GET_TABLES, GET_TABLE_TYPES, GET_COLUMNS, GET_FUNCTIONS, UNKNOWN, PROCEDURAL_SQL } // Client-side reference to a task running // asynchronously on the server. struct TOperationHandle { 1: required THandleIdentifier operationId 2: required TOperationType operationType // If hasResultSet = TRUE, then this operation // generates a result set that can be fetched. // Note that the result set may be empty. // // If hasResultSet = FALSE, then this operation // does not generate a result set, and calling // GetResultSetMetadata or FetchResults against // this OperationHandle will generate an error. 3: required bool hasResultSet // For operations that don't generate result sets, // modifiedRowCount is either: // // 1) The number of rows that were modified by // the DML operation (e.g. number of rows inserted, // number of rows deleted, etc). // // 2) 0 for operations that don't modify or add rows. // // 3) < 0 if the operation is capable of modifiying rows, // but Hive is unable to determine how many rows were // modified. For example, Hive's LOAD DATA command // doesn't generate row count information because // Hive doesn't inspect the data as it is loaded. // // modifiedRowCount is unset if the operation generates // a result set. 4: optional double modifiedRowCount } // OpenSession() // // Open a session (connection) on the server against // which operations may be executed. struct TOpenSessionReq { // The version of the HiveServer2 protocol that the client is using. 1: required TProtocolVersion client_protocol = TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10 // Username and password for authentication. // Depending on the authentication scheme being used, // this information may instead be provided by a lower // protocol layer, in which case these fields may be // left unset. 2: optional string username 3: optional string password // Configuration overlay which is applied when the session is // first created. 4: optional map configuration } struct TOpenSessionResp { 1: required TStatus status // The protocol version that the server is using. 2: required TProtocolVersion serverProtocolVersion = TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10 // Session Handle 3: optional TSessionHandle sessionHandle // The configuration settings for this session. 4: optional map configuration } struct TSetClientInfoReq { 1: required TSessionHandle sessionHandle, 2: optional map configuration } struct TSetClientInfoResp { 1: required TStatus status } // CloseSession() // // Closes the specified session and frees any resources // currently allocated to that session. Any open // operations in that session will be canceled. struct TCloseSessionReq { 1: required TSessionHandle sessionHandle } struct TCloseSessionResp { 1: required TStatus status } enum TGetInfoType { CLI_MAX_DRIVER_CONNECTIONS = 0, CLI_MAX_CONCURRENT_ACTIVITIES = 1, CLI_DATA_SOURCE_NAME = 2, CLI_FETCH_DIRECTION = 8, CLI_SERVER_NAME = 13, CLI_SEARCH_PATTERN_ESCAPE = 14, CLI_DBMS_NAME = 17, CLI_DBMS_VER = 18, CLI_ACCESSIBLE_TABLES = 19, CLI_ACCESSIBLE_PROCEDURES = 20, CLI_CURSOR_COMMIT_BEHAVIOR = 23, CLI_DATA_SOURCE_READ_ONLY = 25, CLI_DEFAULT_TXN_ISOLATION = 26, CLI_IDENTIFIER_CASE = 28, CLI_IDENTIFIER_QUOTE_CHAR = 29, CLI_MAX_COLUMN_NAME_LEN = 30, CLI_MAX_CURSOR_NAME_LEN = 31, CLI_MAX_SCHEMA_NAME_LEN = 32, CLI_MAX_CATALOG_NAME_LEN = 34, CLI_MAX_TABLE_NAME_LEN = 35, CLI_SCROLL_CONCURRENCY = 43, CLI_TXN_CAPABLE = 46, CLI_USER_NAME = 47, CLI_TXN_ISOLATION_OPTION = 72, CLI_INTEGRITY = 73, CLI_GETDATA_EXTENSIONS = 81, CLI_NULL_COLLATION = 85, CLI_ALTER_TABLE = 86, CLI_ORDER_BY_COLUMNS_IN_SELECT = 90, CLI_SPECIAL_CHARACTERS = 94, CLI_MAX_COLUMNS_IN_GROUP_BY = 97, CLI_MAX_COLUMNS_IN_INDEX = 98, CLI_MAX_COLUMNS_IN_ORDER_BY = 99, CLI_MAX_COLUMNS_IN_SELECT = 100, CLI_MAX_COLUMNS_IN_TABLE = 101, CLI_MAX_INDEX_SIZE = 102, CLI_MAX_ROW_SIZE = 104, CLI_MAX_STATEMENT_LEN = 105, CLI_MAX_TABLES_IN_SELECT = 106, CLI_MAX_USER_NAME_LEN = 107, CLI_OJ_CAPABILITIES = 115, CLI_XOPEN_CLI_YEAR = 10000, CLI_CURSOR_SENSITIVITY = 10001, CLI_DESCRIBE_PARAMETER = 10002, CLI_CATALOG_NAME = 10003, CLI_COLLATION_SEQ = 10004, CLI_MAX_IDENTIFIER_LEN = 10005, CLI_ODBC_KEYWORDS = 10006 } union TGetInfoValue { 1: string stringValue 2: i16 smallIntValue 3: i32 integerBitmask 4: i32 integerFlag 5: i32 binaryValue 6: i64 lenValue } // GetInfo() // // This function is based on ODBC's CLIGetInfo() function. // The function returns general information about the data source // using the same keys as ODBC. struct TGetInfoReq { // The sesssion to run this request against 1: required TSessionHandle sessionHandle 2: required TGetInfoType infoType } struct TGetInfoResp { 1: required TStatus status 2: required TGetInfoValue infoValue } // ExecuteStatement() // // Execute a statement. // The returned OperationHandle can be used to check on the // status of the statement, and to fetch results once the // statement has finished executing. struct TExecuteStatementReq { // The session to execute the statement against 1: required TSessionHandle sessionHandle // The statement to be executed (DML, DDL, SET, etc) 2: required string statement // Configuration properties that are overlayed on top of the // the existing session configuration before this statement // is executed. These properties apply to this statement // only and will not affect the subsequent state of the Session. 3: optional map confOverlay // Execute asynchronously when runAsync is true 4: optional bool runAsync = false // The number of seconds after which the query will timeout on the server 5: optional i64 queryTimeout = 0 } struct TExecuteStatementResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } // GetTypeInfo() // // Get information about types supported by the HiveServer instance. // The information is returned as a result set which can be fetched // using the OperationHandle provided in the response. // // Refer to the documentation for ODBC's CLIGetTypeInfo function for // the format of the result set. struct TGetTypeInfoReq { // The session to run this request against. 1: required TSessionHandle sessionHandle } struct TGetTypeInfoResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } // UploadData() // // UploadData data to table or path. One of tableName or path must be set. struct TUploadDataReq { // The session to execute the statement against 1: required TSessionHandle sessionHandle // The table to be stored 2: optional string tableName // The path to be stored 3: optional string path // The data to be transferred 4: required binary values } struct TUploadDataResp { 1: required TStatus status 2: required TOperationHandle operationHandle } // DownloadData() // // Download data to JDBC client. One of tableName or query must be set. struct TDownloadDataReq { // The session to download data 1: required TSessionHandle sessionHandle // The download table name 2: optional TPatternOrIdentifier tableName // The download query. For example: SELECT * FROM t1 JOIN t2 ON t1.id = t2.id 3: optional string query // The download file format. For example: Parquet, ORC, CSV, JSON, Avro, etc. 4: optional string format // The download options. For example: dateFormat=yyyy-MM-dd, compression=gzip 5: optional map downloadOptions } struct TDownloadDataResp { 1: required TStatus status 2: required TOperationHandle operationHandle } // GetCatalogs() // // Returns the list of catalogs (databases) // Results are ordered by TABLE_CATALOG // // Resultset columns : // col1 // name: TABLE_CAT // type: STRING // desc: Catalog name. NULL if not applicable. // struct TGetCatalogsReq { // Session to run this request against 1: required TSessionHandle sessionHandle } struct TGetCatalogsResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } // GetSchemas() // // Retrieves the schema names available in this database. // The results are ordered by TABLE_CATALOG and TABLE_SCHEM. // col1 // name: TABLE_SCHEM // type: STRING // desc: schema name // col2 // name: TABLE_CATALOG // type: STRING // desc: catalog name struct TGetSchemasReq { // Session to run this request against 1: required TSessionHandle sessionHandle // Name of the catalog. Must not contain a search pattern. 2: optional TIdentifier catalogName // schema name or pattern 3: optional TPatternOrIdentifier schemaName } struct TGetSchemasResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } // GetTables() // // Returns a list of tables with catalog, schema, and table // type information. The information is returned as a result // set which can be fetched using the OperationHandle // provided in the response. // Results are ordered by TABLE_TYPE, TABLE_CAT, TABLE_SCHEM, and TABLE_NAME // // Result Set Columns: // // col1 // name: TABLE_CAT // type: STRING // desc: Catalog name. NULL if not applicable. // // col2 // name: TABLE_SCHEM // type: STRING // desc: Schema name. // // col3 // name: TABLE_NAME // type: STRING // desc: Table name. // // col4 // name: TABLE_TYPE // type: STRING // desc: The table type, e.g. "TABLE", "VIEW", etc. // // col5 // name: REMARKS // type: STRING // desc: Comments about the table // struct TGetTablesReq { // Session to run this request against 1: required TSessionHandle sessionHandle // Name of the catalog or a search pattern. 2: optional TPatternOrIdentifier catalogName // Name of the schema or a search pattern. 3: optional TPatternOrIdentifier schemaName // Name of the table or a search pattern. 4: optional TPatternOrIdentifier tableName // List of table types to match // e.g. "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", // "LOCAL TEMPORARY", "ALIAS", "SYNONYM", etc. 5: optional list tableTypes } struct TGetTablesResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } // GetTableTypes() // // Returns the table types available in this database. // The results are ordered by table type. // // col1 // name: TABLE_TYPE // type: STRING // desc: Table type name. struct TGetTableTypesReq { // Session to run this request against 1: required TSessionHandle sessionHandle } struct TGetTableTypesResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } // GetColumns() // // Returns a list of columns in the specified tables. // The information is returned as a result set which can be fetched // using the OperationHandle provided in the response. // Results are ordered by TABLE_CAT, TABLE_SCHEM, TABLE_NAME, // and ORDINAL_POSITION. // // Result Set Columns are the same as those for the ODBC CLIColumns // function. // struct TGetColumnsReq { // Session to run this request against 1: required TSessionHandle sessionHandle // Name of the catalog. Must not contain a search pattern. 2: optional TIdentifier catalogName // Schema name or search pattern 3: optional TPatternOrIdentifier schemaName // Table name or search pattern 4: optional TPatternOrIdentifier tableName // Column name or search pattern 5: optional TPatternOrIdentifier columnName } struct TGetColumnsResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } // GetFunctions() // // Returns a list of functions supported by the data source. The // behavior of this function matches // java.sql.DatabaseMetaData.getFunctions() both in terms of // inputs and outputs. // // Result Set Columns: // // col1 // name: FUNCTION_CAT // type: STRING // desc: Function catalog (may be null) // // col2 // name: FUNCTION_SCHEM // type: STRING // desc: Function schema (may be null) // // col3 // name: FUNCTION_NAME // type: STRING // desc: Function name. This is the name used to invoke the function. // // col4 // name: REMARKS // type: STRING // desc: Explanatory comment on the function. // // col5 // name: FUNCTION_TYPE // type: SMALLINT // desc: Kind of function. One of: // * functionResultUnknown - Cannot determine if a return value or a table // will be returned. // * functionNoTable - Does not a return a table. // * functionReturnsTable - Returns a table. // // col6 // name: SPECIFIC_NAME // type: STRING // desc: The name which uniquely identifies this function within its schema. // In this case this is the fully qualified class name of the class // that implements this function. // struct TGetFunctionsReq { // Session to run this request against 1: required TSessionHandle sessionHandle // A catalog name; must match the catalog name as it is stored in the // database; "" retrieves those without a catalog; null means // that the catalog name should not be used to narrow the search. 2: optional TIdentifier catalogName // A schema name pattern; must match the schema name as it is stored // in the database; "" retrieves those without a schema; null means // that the schema name should not be used to narrow the search. 3: optional TPatternOrIdentifier schemaName // A function name pattern; must match the function name as it is stored // in the database. 4: required TPatternOrIdentifier functionName } struct TGetFunctionsResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } struct TGetPrimaryKeysReq { // Session to run this request against 1: required TSessionHandle sessionHandle // Name of the catalog. 2: optional TIdentifier catalogName // Name of the schema. 3: optional TIdentifier schemaName // Name of the table. 4: optional TIdentifier tableName } struct TGetPrimaryKeysResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } struct TGetCrossReferenceReq { // Session to run this request against 1: required TSessionHandle sessionHandle // Name of the parent catalog. 2: optional TIdentifier parentCatalogName // Name of the parent schema. 3: optional TIdentifier parentSchemaName // Name of the parent table. 4: optional TIdentifier parentTableName // Name of the foreign catalog. 5: optional TIdentifier foreignCatalogName // Name of the foreign schema. 6: optional TIdentifier foreignSchemaName // Name of the foreign table. 7: optional TIdentifier foreignTableName } struct TGetCrossReferenceResp { 1: required TStatus status 2: optional TOperationHandle operationHandle } // GetOperationStatus() // // Get the status of an operation running on the server. struct TGetOperationStatusReq { // Session to run this request against 1: required TOperationHandle operationHandle // optional arguments to get progress information 2: optional bool getProgressUpdate } struct TGetOperationStatusResp { 1: required TStatus status 2: optional TOperationState operationState // If operationState is ERROR_STATE, then the following fields may be set // sqlState as defined in the ISO/IEF CLI specification 3: optional string sqlState // Internal error code 4: optional i32 errorCode // Error message 5: optional string errorMessage // List of statuses of sub tasks 6: optional string taskStatus // When was the operation started 7: optional i64 operationStarted // When was the operation completed 8: optional i64 operationCompleted // If the operation has the result 9: optional bool hasResultSet 10: optional TProgressUpdateResp progressUpdateResponse 11: optional i64 numModifiedRows } // CancelOperation() // // Cancels processing on the specified operation handle and // frees any resources which were allocated. struct TCancelOperationReq { // Operation to cancel 1: required TOperationHandle operationHandle } struct TCancelOperationResp { 1: required TStatus status } // CloseOperation() // // Given an operation in the FINISHED, CANCELED, // or ERROR states, CloseOperation() will free // all of the resources which were allocated on // the server to service the operation. struct TCloseOperationReq { 1: required TOperationHandle operationHandle } struct TCloseOperationResp { 1: required TStatus status } // GetResultSetMetadata() // // Retrieves schema information for the specified operation struct TGetResultSetMetadataReq { // Operation for which to fetch result set schema information 1: required TOperationHandle operationHandle } struct TGetResultSetMetadataResp { 1: required TStatus status 2: optional TTableSchema schema } enum TFetchOrientation { // Get the next rowset. The fetch offset is ignored. FETCH_NEXT, // Get the previous rowset. The fetch offset is ignored. // NOT SUPPORTED FETCH_PRIOR, // Return the rowset at the given fetch offset relative // to the curren rowset. // NOT SUPPORTED FETCH_RELATIVE, // Return the rowset at the specified fetch offset. // NOT SUPPORTED FETCH_ABSOLUTE, // Get the first rowset in the result set. FETCH_FIRST, // Get the last rowset in the result set. // NOT SUPPORTED FETCH_LAST } // FetchResults() // // Fetch rows from the server corresponding to // a particular OperationHandle. struct TFetchResultsReq { // Operation from which to fetch results. 1: required TOperationHandle operationHandle // The fetch orientation. For V1 this must be either // FETCH_NEXT or FETCH_FIRST. Defaults to FETCH_NEXT. 2: required TFetchOrientation orientation = TFetchOrientation.FETCH_NEXT // Max number of rows that should be returned in // the rowset. 3: required i64 maxRows // The type of a fetch results request. 0 represents Query output. 1 represents Log 4: optional i16 fetchType = 0 } struct TFetchResultsResp { 1: required TStatus status // TRUE if there are more rows left to fetch from the server. 2: optional bool hasMoreRows // The rowset. This is optional so that we have the // option in the future of adding alternate formats for // representing result set data, e.g. delimited strings, // binary encoded, etc. 3: optional TRowSet results } // GetDelegationToken() // Retrieve delegation token for the current user struct TGetDelegationTokenReq { // session handle 1: required TSessionHandle sessionHandle // userid for the proxy user 2: required string owner // designated renewer userid 3: required string renewer } struct TGetDelegationTokenResp { // status of the request 1: required TStatus status // delegation token string 2: optional string delegationToken } // CancelDelegationToken() // Cancel the given delegation token struct TCancelDelegationTokenReq { // session handle 1: required TSessionHandle sessionHandle // delegation token to cancel 2: required string delegationToken } struct TCancelDelegationTokenResp { // status of the request 1: required TStatus status } // RenewDelegationToken() // Renew the given delegation token struct TRenewDelegationTokenReq { // session handle 1: required TSessionHandle sessionHandle // delegation token to renew 2: required string delegationToken } struct TRenewDelegationTokenResp { // status of the request 1: required TStatus status } enum TJobExecutionStatus { IN_PROGRESS, COMPLETE, NOT_AVAILABLE } struct TProgressUpdateResp { 1: required list headerNames 2: required list> rows 3: required double progressedPercentage 4: required TJobExecutionStatus status 5: required string footerSummary 6: required i64 startTime } struct TGetQueryIdReq { 1: required TOperationHandle operationHandle } struct TGetQueryIdResp { 1: required string queryId } service TCLIService { TOpenSessionResp OpenSession(1:TOpenSessionReq req); TCloseSessionResp CloseSession(1:TCloseSessionReq req); TGetInfoResp GetInfo(1:TGetInfoReq req); TExecuteStatementResp ExecuteStatement(1:TExecuteStatementReq req); TGetTypeInfoResp GetTypeInfo(1:TGetTypeInfoReq req); TGetCatalogsResp GetCatalogs(1:TGetCatalogsReq req); TGetSchemasResp GetSchemas(1:TGetSchemasReq req); TGetTablesResp GetTables(1:TGetTablesReq req); TGetTableTypesResp GetTableTypes(1:TGetTableTypesReq req); TGetColumnsResp GetColumns(1:TGetColumnsReq req); TGetFunctionsResp GetFunctions(1:TGetFunctionsReq req); TGetPrimaryKeysResp GetPrimaryKeys(1:TGetPrimaryKeysReq req); TGetCrossReferenceResp GetCrossReference(1:TGetCrossReferenceReq req); TGetOperationStatusResp GetOperationStatus(1:TGetOperationStatusReq req); TCancelOperationResp CancelOperation(1:TCancelOperationReq req); TCloseOperationResp CloseOperation(1:TCloseOperationReq req); TGetResultSetMetadataResp GetResultSetMetadata(1:TGetResultSetMetadataReq req); TFetchResultsResp FetchResults(1:TFetchResultsReq req); TGetDelegationTokenResp GetDelegationToken(1:TGetDelegationTokenReq req); TCancelDelegationTokenResp CancelDelegationToken(1:TCancelDelegationTokenReq req); TRenewDelegationTokenResp RenewDelegationToken(1:TRenewDelegationTokenReq req); TGetQueryIdResp GetQueryId(1:TGetQueryIdReq req); TSetClientInfoResp SetClientInfo(1:TSetClientInfoReq req); TUploadDataResp UploadData(1:TUploadDataReq req); TDownloadDataResp DownloadData(1:TDownloadDataReq req); }