blob: 8b204b3bbd7ec6dfadaa51059e81e1f48ac5f3cd [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.
*/
// ----------------------------------------------------------------
// Hbase.thrift
//
// This is a Thrift interface definition file for the Hbase service.
// Target language libraries for C++, Java, Ruby, PHP, (and more) are
// generated by running this file through the Thrift compiler with the
// appropriate flags. The Thrift compiler binary and runtime
// libraries for various languages are available
// from the Apache Incubator (http://incubator.apache.org/thrift/)
//
// See the package.html file for information on the version of Thrift
// used to generate the *.java files checked into the Hbase project.
// ----------------------------------------------------------------
namespace java org.apache.hadoop.hbase.thrift.generated
namespace cpp apache.hadoop.hbase.thrift
namespace rb Apache.Hadoop.Hbase.Thrift
namespace py hbase
namespace perl Hbase
namespace php Hbase
//
// Types
//
// NOTE: all variables with the Text type are assumed to be correctly
// formatted UTF-8 strings. This is a programming language and locale
// dependent property that the client application is repsonsible for
// maintaining. If strings with an invalid encoding are sent, an
// IOError will be thrown.
typedef binary Text
typedef binary Bytes
typedef i32 ScannerID
/**
* TCell - Used to transport a cell value (byte[]) and the timestamp it was
* stored with together as a result for get and getRow methods. This promotes
* the timestamp of a cell to a first-class value, making it easy to take
* note of temporal data. Cell is used all the way from HStore up to HTable.
*/
struct TCell{
1:Bytes value,
2:i64 timestamp
}
/**
* An HColumnDescriptor contains information about a column family
* such as the number of versions, compression settings, etc. It is
* used as input when creating a table or adding a column.
*/
struct ColumnDescriptor {
1:Text name,
2:i32 maxVersions = 3,
3:string compression = "NONE",
4:bool inMemory = 0,
5:string bloomFilterType = "NONE",
6:i32 bloomFilterVectorSize = 0,
7:i32 bloomFilterNbHashes = 0,
8:bool blockCacheEnabled = 0,
9:i32 timeToLive = 0x7fffffff
}
/**
* A TRegionInfo contains information about an HTable region.
*/
struct TRegionInfo {
1:Text startKey,
2:Text endKey,
3:i64 id,
4:Text name,
5:byte version,
6:Text serverName,
7:i32 port
}
/**
* A Mutation object is used to either update or delete a column-value.
*/
struct Mutation {
1:bool isDelete = 0,
2:Text column,
3:Text value,
4:bool writeToWAL = 1
}
/**
* A BatchMutation object is used to apply a number of Mutations to a single row.
*/
struct BatchMutation {
1:Text row,
2:list<Mutation> mutations
}
/**
* For increments that are not incrementColumnValue
* equivalents.
*/
struct TIncrement {
1:Text table,
2:Text row,
3:Text column,
4:i64 ammount
}
/**
* Holds column name and the cell.
*/
struct TColumn {
1:Text columnName,
2:TCell cell
}
/**
* Holds row name and then a map of columns to cells.
*/
struct TRowResult {
1:Text row,
2:optional map<Text, TCell> columns,
3:optional list<TColumn> sortedColumns
}
/**
* A Scan object is used to specify scanner parameters when opening a scanner.
*/
struct TScan {
1:optional Text startRow,
2:optional Text stopRow,
3:optional i64 timestamp,
4:optional list<Text> columns,
5:optional i32 caching,
6:optional Text filterString,
7:optional i32 batchSize,
8:optional bool sortColumns,
9:optional bool reversed,
10:optional bool cacheBlocks
}
/**
* An Append object is used to specify the parameters for performing the append operation.
*/
struct TAppend {
1:Text table,
2:Text row,
3:list<Text> columns,
4:list<Text> values
}
//
// Exceptions
//
/**
* An IOError exception signals that an error occurred communicating
* to the Hbase master or an Hbase region server. Also used to return
* more general Hbase error conditions.
*/
exception IOError {
1:string message
2:bool canRetry
}
/**
* An IllegalArgument exception indicates an illegal or invalid
* argument was passed into a procedure.
*/
exception IllegalArgument {
1:string message
}
/**
* An AlreadyExists exceptions signals that a table with the specified
* name already exists
*/
exception AlreadyExists {
1:string message
}
/**
* Specify type of thrift server: thrift and thrift2
*/
enum TThriftServerType {
ONE = 1,
TWO = 2
}
enum TPermissionScope {
TABLE = 0,
NAMESPACE = 1
}
/**
* TAccessControlEntity for permission control
*/
struct TAccessControlEntity {
1: required string username
2: required TPermissionScope scope
4: required string actions
5: optional Bytes tableName
6: optional string nsName
}
//
// Service
//
service Hbase {
/**
* Brings a table on-line (enables it)
*/
void enableTable(
/** name of the table */
1:Bytes tableName
) throws (1:IOError io)
/**
* Disables a table (takes it off-line) If it is being served, the master
* will tell the servers to stop serving it.
*/
void disableTable(
/** name of the table */
1:Bytes tableName
) throws (1:IOError io)
/**
* @return true if table is on-line
*/
bool isTableEnabled(
/** name of the table to check */
1:Bytes tableName
) throws (1:IOError io)
void compact(1:Bytes tableNameOrRegionName)
throws (1:IOError io)
void majorCompact(1:Bytes tableNameOrRegionName)
throws (1:IOError io)
/**
* List all the userspace tables.
*
* @return returns a list of names
*/
list<Text> getTableNames()
throws (1:IOError io)
/**
* List all the userspace tables and their enabled or disabled flags.
*
* @return list of tables with is enabled flags
*/
map<Text,bool> getTableNamesWithIsTableEnabled()
throws (1:IOError io)
/**
* List all the column families assoicated with a table.
*
* @return list of column family descriptors
*/
map<Text,ColumnDescriptor> getColumnDescriptors (
/** table name */
1:Text tableName
) throws (1:IOError io)
/**
* List the regions associated with a table.
*
* @return list of region descriptors
*/
list<TRegionInfo> getTableRegions(
/** table name */
1:Text tableName)
throws (1:IOError io)
/**
* Create a table with the specified column families. The name
* field for each ColumnDescriptor must be set and must end in a
* colon (:). All other fields are optional and will get default
* values if not explicitly specified.
*
* @throws IllegalArgument if an input parameter is invalid
*
* @throws AlreadyExists if the table name already exists
*/
void createTable(
/** name of table to create */
1:Text tableName,
/** list of column family descriptors */
2:list<ColumnDescriptor> columnFamilies
) throws (1:IOError io, 2:IllegalArgument ia, 3:AlreadyExists exist)
/**
* Deletes a table
*
* @throws IOError if table doesn't exist on server or there was some other
* problem
*/
void deleteTable(
/** name of table to delete */
1:Text tableName
) throws (1:IOError io)
/**
* Get a single TCell for the specified table, row, and column at the
* latest timestamp. Returns an empty list if no such value exists.
*
* @return value for specified row/column
*/
list<TCell> get(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** column name */
3:Text column,
/** Get attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get the specified number of versions for the specified table,
* row, and column.
*
* @return list of cells for specified row/column
*/
list<TCell> getVer(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** column name */
3:Text column,
/** number of versions to retrieve */
4:i32 numVersions,
/** Get attributes */
5:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get the specified number of versions for the specified table,
* row, and column. Only versions less than or equal to the specified
* timestamp will be returned.
*
* @return list of cells for specified row/column
*/
list<TCell> getVerTs(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** column name */
3:Text column,
/** timestamp */
4:i64 timestamp,
/** number of versions to retrieve */
5:i32 numVersions,
/** Get attributes */
6:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get all the data for the specified table and row at the latest
* timestamp. Returns an empty list if the row does not exist.
*
* @return TRowResult containing the row and map of columns to TCells
*/
list<TRowResult> getRow(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** Get attributes */
3:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get the specified columns for the specified table and row at the latest
* timestamp. Returns an empty list if the row does not exist.
*
* @return TRowResult containing the row and map of columns to TCells
*/
list<TRowResult> getRowWithColumns(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** List of columns to return, null for all columns */
3:list<Text> columns,
/** Get attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get all the data for the specified table and row at the specified
* timestamp. Returns an empty list if the row does not exist.
*
* @return TRowResult containing the row and map of columns to TCells
*/
list<TRowResult> getRowTs(
/** name of the table */
1:Text tableName,
/** row key */
2:Text row,
/** timestamp */
3:i64 timestamp,
/** Get attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get the specified columns for the specified table and row at the specified
* timestamp. Returns an empty list if the row does not exist.
*
* @return TRowResult containing the row and map of columns to TCells
*/
list<TRowResult> getRowWithColumnsTs(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** List of columns to return, null for all columns */
3:list<Text> columns,
4:i64 timestamp,
/** Get attributes */
5:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get all the data for the specified table and rows at the latest
* timestamp. Returns an empty list if no rows exist.
*
* @return TRowResult containing the rows and map of columns to TCells
*/
list<TRowResult> getRows(
/** name of table */
1:Text tableName,
/** row keys */
2:list<Text> rows
/** Get attributes */
3:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get the specified columns for the specified table and rows at the latest
* timestamp. Returns an empty list if no rows exist.
*
* @return TRowResult containing the rows and map of columns to TCells
*/
list<TRowResult> getRowsWithColumns(
/** name of table */
1:Text tableName,
/** row keys */
2:list<Text> rows,
/** List of columns to return, null for all columns */
3:list<Text> columns,
/** Get attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get all the data for the specified table and rows at the specified
* timestamp. Returns an empty list if no rows exist.
*
* @return TRowResult containing the rows and map of columns to TCells
*/
list<TRowResult> getRowsTs(
/** name of the table */
1:Text tableName,
/** row keys */
2:list<Text> rows
/** timestamp */
3:i64 timestamp,
/** Get attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get the specified columns for the specified table and rows at the specified
* timestamp. Returns an empty list if no rows exist.
*
* @return TRowResult containing the rows and map of columns to TCells
*/
list<TRowResult> getRowsWithColumnsTs(
/** name of table */
1:Text tableName,
/** row keys */
2:list<Text> rows
/** List of columns to return, null for all columns */
3:list<Text> columns,
4:i64 timestamp,
/** Get attributes */
5:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Apply a series of mutations (updates/deletes) to a row in a
* single transaction. If an exception is thrown, then the
* transaction is aborted. Default current timestamp is used, and
* all entries will have an identical timestamp.
*/
void mutateRow(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** list of mutation commands */
3:list<Mutation> mutations,
/** Mutation attributes */
4:map<Text, Text> attributes
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Apply a series of mutations (updates/deletes) to a row in a
* single transaction. If an exception is thrown, then the
* transaction is aborted. The specified timestamp is used, and
* all entries will have an identical timestamp.
*/
void mutateRowTs(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** list of mutation commands */
3:list<Mutation> mutations,
/** timestamp */
4:i64 timestamp,
/** Mutation attributes */
5:map<Text, Text> attributes
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Apply a series of batches (each a series of mutations on a single row)
* in a single transaction. If an exception is thrown, then the
* transaction is aborted. Default current timestamp is used, and
* all entries will have an identical timestamp.
*/
void mutateRows(
/** name of table */
1:Text tableName,
/** list of row batches */
2:list<BatchMutation> rowBatches,
/** Mutation attributes */
3:map<Text, Text> attributes
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Apply a series of batches (each a series of mutations on a single row)
* in a single transaction. If an exception is thrown, then the
* transaction is aborted. The specified timestamp is used, and
* all entries will have an identical timestamp.
*/
void mutateRowsTs(
/** name of table */
1:Text tableName,
/** list of row batches */
2:list<BatchMutation> rowBatches,
/** timestamp */
3:i64 timestamp,
/** Mutation attributes */
4:map<Text, Text> attributes
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Atomically increment the column value specified. Returns the next value post increment.
*/
i64 atomicIncrement(
/** name of table */
1:Text tableName,
/** row to increment */
2:Text row,
/** name of column */
3:Text column,
/** amount to increment by */
4:i64 value
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Delete all cells that match the passed row and column.
*/
void deleteAll(
/** name of table */
1:Text tableName,
/** Row to update */
2:Text row,
/** name of column whose value is to be deleted */
3:Text column,
/** Delete attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Delete all cells that match the passed row and column and whose
* timestamp is equal-to or older than the passed timestamp.
*/
void deleteAllTs(
/** name of table */
1:Text tableName,
/** Row to update */
2:Text row,
/** name of column whose value is to be deleted */
3:Text column,
/** timestamp */
4:i64 timestamp,
/** Delete attributes */
5:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Completely delete the row's cells.
*/
void deleteAllRow(
/** name of table */
1:Text tableName,
/** key of the row to be completely deleted. */
2:Text row,
/** Delete attributes */
3:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Increment a cell by the ammount.
* Increments can be applied async if hbase.regionserver.thrift.coalesceIncrement is set to true.
* False is the default. Turn to true if you need the extra performance and can accept some
* data loss if a thrift server dies with increments still in the queue.
*/
void increment(
/** The single increment to apply */
1:TIncrement increment
) throws (1:IOError io)
void incrementRows(
/** The list of increments */
1:list<TIncrement> increments
) throws (1:IOError io)
/**
* Completely delete the row's cells marked with a timestamp
* equal-to or older than the passed timestamp.
*/
void deleteAllRowTs(
/** name of table */
1:Text tableName,
/** key of the row to be completely deleted. */
2:Text row,
/** timestamp */
3:i64 timestamp,
/** Delete attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get a scanner on the current table, using the Scan instance
* for the scan parameters.
*/
ScannerID scannerOpenWithScan(
/** name of table */
1:Text tableName,
/** Scan instance */
2:TScan scan,
/** Scan attributes */
3:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get a scanner on the current table starting at the specified row and
* ending at the last row in the table. Return the specified columns.
*
* @return scanner id to be used with other scanner procedures
*/
ScannerID scannerOpen(
/** name of table */
1:Text tableName,
/**
* Starting row in table to scan.
* Send "" (empty string) to start at the first row.
*/
2:Text startRow,
/**
* columns to scan. If column name is a column family, all
* columns of the specified column family are returned. It's also possible
* to pass a regex in the column qualifier.
*/
3:list<Text> columns,
/** Scan attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get a scanner on the current table starting and stopping at the
* specified rows. ending at the last row in the table. Return the
* specified columns.
*
* @return scanner id to be used with other scanner procedures
*/
ScannerID scannerOpenWithStop(
/** name of table */
1:Text tableName,
/**
* Starting row in table to scan.
* Send "" (empty string) to start at the first row.
*/
2:Text startRow,
/**
* row to stop scanning on. This row is *not* included in the
* scanner's results
*/
3:Text stopRow,
/**
* columns to scan. If column name is a column family, all
* columns of the specified column family are returned. It's also possible
* to pass a regex in the column qualifier.
*/
4:list<Text> columns,
/** Scan attributes */
5:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Open a scanner for a given prefix. That is all rows will have the specified
* prefix. No other rows will be returned.
*
* @return scanner id to use with other scanner calls
*/
ScannerID scannerOpenWithPrefix(
/** name of table */
1:Text tableName,
/** the prefix (and thus start row) of the keys you want */
2:Text startAndPrefix,
/** the columns you want returned */
3:list<Text> columns,
/** Scan attributes */
4:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get a scanner on the current table starting at the specified row and
* ending at the last row in the table. Return the specified columns.
* Only values with the specified timestamp are returned.
*
* @return scanner id to be used with other scanner procedures
*/
ScannerID scannerOpenTs(
/** name of table */
1:Text tableName,
/**
* Starting row in table to scan.
* Send "" (empty string) to start at the first row.
*/
2:Text startRow,
/**
* columns to scan. If column name is a column family, all
* columns of the specified column family are returned. It's also possible
* to pass a regex in the column qualifier.
*/
3:list<Text> columns,
/** timestamp */
4:i64 timestamp,
/** Scan attributes */
5:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Get a scanner on the current table starting and stopping at the
* specified rows. ending at the last row in the table. Return the
* specified columns. Only values with the specified timestamp are
* returned.
*
* @return scanner id to be used with other scanner procedures
*/
ScannerID scannerOpenWithStopTs(
/** name of table */
1:Text tableName,
/**
* Starting row in table to scan.
* Send "" (empty string) to start at the first row.
*/
2:Text startRow,
/**
* row to stop scanning on. This row is *not* included in the
* scanner's results
*/
3:Text stopRow,
/**
* columns to scan. If column name is a column family, all
* columns of the specified column family are returned. It's also possible
* to pass a regex in the column qualifier.
*/
4:list<Text> columns,
/** timestamp */
5:i64 timestamp,
/** Scan attributes */
6:map<Text, Text> attributes
) throws (1:IOError io)
/**
* Returns the scanner's current row value and advances to the next
* row in the table. When there are no more rows in the table, or a key
* greater-than-or-equal-to the scanner's specified stopRow is reached,
* an empty list is returned.
*
* @return a TRowResult containing the current row and a map of the columns to TCells.
*
* @throws IllegalArgument if ScannerID is invalid
*
* @throws NotFound when the scanner reaches the end
*/
list<TRowResult> scannerGet(
/** id of a scanner returned by scannerOpen */
1:ScannerID id
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Returns, starting at the scanner's current row value nbRows worth of
* rows and advances to the next row in the table. When there are no more
* rows in the table, or a key greater-than-or-equal-to the scanner's
* specified stopRow is reached, an empty list is returned.
*
* @return a TRowResult containing the current row and a map of the columns to TCells.
*
* @throws IllegalArgument if ScannerID is invalid
*
* @throws NotFound when the scanner reaches the end
*/
list<TRowResult> scannerGetList(
/** id of a scanner returned by scannerOpen */
1:ScannerID id,
/** number of results to return */
2:i32 nbRows
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Closes the server-state associated with an open scanner.
*
* @throws IllegalArgument if ScannerID is invalid
*/
void scannerClose(
/** id of a scanner returned by scannerOpen */
1:ScannerID id
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Get the regininfo for the specified row. It scans
* the metatable to find region's start and end keys.
*
* @return value for specified row/column
*/
TRegionInfo getRegionInfo(
/** row key */
1:Text row,
) throws (1:IOError io)
/**
* Appends values to one or more columns within a single row.
*
* @return values of columns after the append operation.
*/
list<TCell> append(
/** The single append operation to apply */
1:TAppend append,
) throws (1:IOError io)
/**
* Atomically checks if a row/family/qualifier value matches the expected
* value. If it does, it adds the corresponding mutation operation for put.
*
* @return true if the new put was executed, false otherwise
*/
bool checkAndPut(
/** name of table */
1:Text tableName,
/** row key */
2:Text row,
/** column name */
3:Text column,
/** the expected value for the column parameter, if not
provided the check is for the non-existence of the
column in question */
5:Text value
/** mutation for the put */
6:Mutation mput,
/** Mutation attributes */
7:map<Text, Text> attributes
) throws (1:IOError io, 2:IllegalArgument ia)
/**
* Get the type of this thrift server.
*
* @return the type of this thrift server
*/
TThriftServerType getThriftServerType()
/**
* Returns the cluster ID for this cluster.
*/
string getClusterId()
/**
* Grant permissions in namespace or table level.
*/
bool grant(
1: required TAccessControlEntity info
) throws (1: IOError io)
/**
* Revoke permissions in namespace or table level.
*/
bool revoke(
1: required TAccessControlEntity info
) throws (1: IOError io)
}