blob: 20fa9ec0f18c6d2783851cedf7c220fff58e86e9 [file] [log] [blame]
// 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.
namespace cpp impala.extdatasource
namespace java org.apache.impala.extdatasource.thrift
include "Status.thrift"
include "Data.thrift"
include "Types.thrift"
// A result set column descriptor.
struct TColumnDesc {
// The column name as given in the Create .. statement. Always set.
1: optional string name
// The column type. Always set.
2: optional Types.TColumnType type
}
// Metadata used to describe the schema (column names, types, comments)
// of result sets.
struct TTableSchema {
// List of columns. Always set.
1: optional list<TColumnDesc> cols
}
// Serialized batch of rows returned by getNext().
struct TRowBatch {
// Each TColumnData contains the data for an entire column. Always set.
1: optional list<Data.TColumnData> cols
// The number of rows returned. For count(*) queries, there may not be
// any materialized columns so cols will be an empty list and this value
// will indicate how many rows are returned. When there are materialized
// columns, this number should be the same as the size of each
// TColumnData.is_null list.
2: optional i64 num_rows
}
// Comparison operators used in predicates.
enum TComparisonOp {
LT = 0
LE = 1
EQ = 2
NE = 3
GE = 4
GT = 5
DISTINCT_FROM = 6
NOT_DISTINCT = 7
}
// Binary predicates that can be pushed to the external data source and
// are of the form <col> <op> <val>. Sources can choose to accept or reject
// predicates via the return value of prepare(), see TPrepareResult.
// The column and the value are guaranteed to be type compatible in Impala,
// but they are not necessarily the same type, so the data source
// implementation may need to do an implicit cast.
struct TBinaryPredicate {
// Column on which the predicate is applied. Always set.
1: optional TColumnDesc col
// Comparison operator. Always set.
2: optional TComparisonOp op
// Value on the right side of the binary predicate. Always set.
3: optional Data.TColumnValue value
}
// Parameters to prepare().
struct TPrepareParams {
// The name of the table. Always set.
1: optional string table_name
// A string specified for the table that is passed to the external data source.
// Always set, may be an empty string.
2: optional string init_string
// A list of conjunctive (AND) clauses, each of which contains a list of
// disjunctive (OR) binary predicates. Always set, may be an empty list.
3: optional list<list<TBinaryPredicate>> predicates
}
// Returned by prepare().
struct TPrepareResult {
1: required Status.TStatus status
// Estimate of the total number of rows returned when applying the predicates indicated
// by accepted_conjuncts. Not set if the data source does not support providing
// this statistic.
2: optional i64 num_rows_estimate
// Accepted conjuncts. References the 'predicates' parameter in the prepare()
// call. It contains the 0-based indices of the top-level list elements (the
// AND elements) that the library will be able to apply during the scan. Those
// elements that aren’t referenced in accepted_conjuncts will be evaluated by
// Impala itself.
3: optional list<i32> accepted_conjuncts
}
// Parameters to open().
struct TOpenParams {
// A unique identifier for the query. Always set.
1: optional Types.TUniqueId query_id
// The name of the table. Always set.
2: optional string table_name
// A string specified for the table that is passed to the external data source.
// Always set, may be an empty string.
3: optional string init_string
// The authenticated user name. Always set.
4: optional string authenticated_user_name
// The schema of the rows that the scan needs to return. Always set.
5: optional TTableSchema row_schema
// The expected size of the row batches it returns in the subsequent getNext() calls.
// Always set.
6: optional i32 batch_size
// A representation of the scan predicates that were accepted in the preceding
// prepare() call. Always set.
7: optional list<list<TBinaryPredicate>> predicates
// The query limit, if specified.
8: optional i64 limit
}
// Returned by open().
struct TOpenResult {
1: required Status.TStatus status
// An opaque handle used in subsequent getNext()/close() calls. Required.
2: optional string scan_handle
}
// Parameters to getNext()
struct TGetNextParams {
// The opaque handle returned by the previous open() call. Always set.
1: optional string scan_handle
}
// Returned by getNext().
struct TGetNextResult {
1: required Status.TStatus status
// If true, reached the end of the result stream; subsequent calls to
// getNext() won’t return any more results. Required.
2: optional bool eos
// A batch of rows to return, if any exist. The number of rows in the batch
// should be less than or equal to the batch_size specified in TOpenParams.
3: optional TRowBatch rows
}
// Parameters to close()
struct TCloseParams {
// The opaque handle returned by the previous open() call. Always set.
1: optional string scan_handle
}
// Returned by close().
struct TCloseResult {
1: required Status.TStatus status
}