/* * 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 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 columns, 3:optional list 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 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 columns, 4:list 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 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 getTableNamesWithIsTableEnabled() throws (1:IOError io) /** * List all the column families assoicated with a table. * * @return list of column family descriptors */ map getColumnDescriptors ( /** table name */ 1:Text tableName ) throws (1:IOError io) /** * List the regions associated with a table. * * @return list of region descriptors */ list 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 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 get( /** name of table */ 1:Text tableName, /** row key */ 2:Text row, /** column name */ 3:Text column, /** Get attributes */ 4:map 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 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 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 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 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 getRow( /** name of table */ 1:Text tableName, /** row key */ 2:Text row, /** Get attributes */ 3:map 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 getRowWithColumns( /** name of table */ 1:Text tableName, /** row key */ 2:Text row, /** List of columns to return, null for all columns */ 3:list columns, /** Get attributes */ 4:map 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 getRowTs( /** name of the table */ 1:Text tableName, /** row key */ 2:Text row, /** timestamp */ 3:i64 timestamp, /** Get attributes */ 4:map 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 getRowWithColumnsTs( /** name of table */ 1:Text tableName, /** row key */ 2:Text row, /** List of columns to return, null for all columns */ 3:list columns, 4:i64 timestamp, /** Get attributes */ 5:map 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 getRows( /** name of table */ 1:Text tableName, /** row keys */ 2:list rows /** Get attributes */ 3:map 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 getRowsWithColumns( /** name of table */ 1:Text tableName, /** row keys */ 2:list rows, /** List of columns to return, null for all columns */ 3:list columns, /** Get attributes */ 4:map 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 getRowsTs( /** name of the table */ 1:Text tableName, /** row keys */ 2:list rows /** timestamp */ 3:i64 timestamp, /** Get attributes */ 4:map 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 getRowsWithColumnsTs( /** name of table */ 1:Text tableName, /** row keys */ 2:list rows /** List of columns to return, null for all columns */ 3:list columns, 4:i64 timestamp, /** Get attributes */ 5:map 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 mutations, /** Mutation attributes */ 4:map 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 mutations, /** timestamp */ 4:i64 timestamp, /** Mutation attributes */ 5:map 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 rowBatches, /** Mutation attributes */ 3:map 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 rowBatches, /** timestamp */ 3:i64 timestamp, /** Mutation attributes */ 4:map 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 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 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 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 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 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 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 columns, /** Scan attributes */ 4:map 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 columns, /** Scan attributes */ 5:map 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 columns, /** Scan attributes */ 4:map 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 columns, /** timestamp */ 4:i64 timestamp, /** Scan attributes */ 5:map 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 columns, /** timestamp */ 5:i64 timestamp, /** Scan attributes */ 6:map 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 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 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 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 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) }