class HBaseClient: ''' Hbase client ''' def __init__(self): transport = TSocket.TSocket('localhost', 9090) transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport) self.__client = Client(protocol) transport.open() def getTableNames(self): ''' get table names ''' return self.__client.getTableNames() def deleteTable(self, tName): ''' delete table name ''' if self.__client.isTableEnabled(tName): self.__client.disableTable(tName) self.__client.deleteTable(tName) def createTable(self, tName, ColumnDescriptors): try: self.__client.createTable(tName, ColumnDescriptors) except ttypes.AlreadyExists as excp: raise UfException(Errors.HBASE_CREATE_ERROR, "AlreadyExists Error when creating table %s with cols: %s): %s" % \ (tName, [col.name for col in ColumnDescriptors], excp.message)) def getColumnDescriptors(self, tName): try: return self.__client.getColumnDescriptors(tName) except: raise UfException(Errors.UNKNOWN_ERROR, "Error when getting column descriptors table %s" % tName) def updateRow(self, tName, rowName, mutations, timestamp=None): ''' add row to table ''' try: if timestamp is None: self.__client.mutateRow(tName, rowName, mutations) else: self.__client.mutateRowTs(tName, rowName, mutations, timestamp) except Exception as excp: raise UfException(Errors.HBASE_UPDATE_ERROR, "Error when updating table %s - rowName %s - mutations %s: %s" % \ (tName, rowName, mutations, excp)) def getRow(self, tName, rowName): ''' get row ''' result = self.__client.getRow(tName, rowName) if not result: return result else: return result[0] def scanTable(self, tName, columns, startRow="", endRow=None): ''' scan a table ''' if endRow is None: scanner = self.__client.scannerOpen(tName, startRow, columns) else: scanner = self.__client.scannerOpenWithStop(tName, startRow, endRow, columns) ret = [] row = self.__client.scannerGet(scanner) while row: ret.append(row[0]) row = self.__client.scannerGet(scanner) return ret def getClient(self): ''' return client, in case low level api is needed ''' return self.__client
r = client.scannerGet(scanner) while r: printRow(r[0]) r = client.scannerGet(scanner) print "Scanner finished" # # Run some operations on a bunch of rows. # for e in range(100, 0, -1): # format row keys as "00000" to "00100" row = "%0.5d" % (e) mutations = [Mutation(column="unused:", value="DELETE_ME")] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)[0]) client.deleteAllRow(t, row) mutations = [ Mutation(column="entry:num", value="0"), Mutation(column="entry:foo", value="FOO") ] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)[0]) mutations = [ Mutation(column="entry:foo", isDelete=True), Mutation(column="entry:num", value="-1") ] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)[0])
r = client.scannerGet(scanner) while r: printRow(r[0]) r = client.scannerGet(scanner) print "Scanner finished" # # Run some operations on a bunch of rows. # for e in range(100, 0, -1): # format row keys as "00000" to "00100" row = "%0.5d" % (e) mutations = [Mutation(column="unused:", value="DELETE_ME")] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)[0]) client.deleteAllRow(t, row) mutations = [Mutation(column="entry:num", value="0"), Mutation(column="entry:foo", value="FOO")] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)[0]); mutations = [Mutation(column="entry:foo",isDelete=True), Mutation(column="entry:num",value="-1")] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)[0]) mutations = [Mutation(column="entry:num", value=str(e)), Mutation(column="entry:sqr", value=str(e*e))] client.mutateRow(t, row, mutations)
try: while 1: printRow(client.scannerGet(scanner)) except ttypes.NotFound, e: print "Scanner finished" # # Run some operations on a bunch of rows. # for e in range(100, 0, -1): # format row keys as "00000" to "00100" row = "%0.5d" % (e) mutations = [Mutation({"column": "unused:", "value": "DELETE_ME"})] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)) client.deleteAllRow(t, row) mutations = [Mutation({"column": "entry:num", "value": "0"}), Mutation({"column": "entry:foo", "value": "FOO"})] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)) mutations = [] m = Mutation() m.column = "entry:foo" m.isDelete = 1 mutations.append(m) m = Mutation() m.column = "entry:num" m.value = "-1" mutations.append(m)
try: while 1: printRow(client.scannerGet(scanner)) except ttypes.NotFound, e: print "Scanner finished" # # Run some operations on a bunch of rows. # for e in range(100, 0, -1): # format row keys as "00000" to "00100" row = "%0.5d" % (e) mutations = [Mutation({"column": "unused:", "value": "DELETE_ME"})] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row)) client.deleteAllRow(t, row) mutations = [ Mutation({ "column": "entry:num", "value": "0" }), Mutation({ "column": "entry:foo", "value": "FOO" }) ] client.mutateRow(t, row, mutations) printRow(client.getRow(t, row))