我在做hbase scan的时候搞的有点头晕,后来多看了几遍后,才发现一点规律,现记下。首先是定义hbase的client,这个都差不多:
transport = TTransport.TBufferedTransport(TSocket.TSocket(host, port))
protocol = TBinaryProtocol.TBinaryProtocol(transport)
self.client = Hbase.Client(protocol)
transport.open()
然后开始扫描,首先需要定义一个扫描器,它是以scannerOpen开头的
self.client.scannerOpen(para...) //单行扫描器
self.client.scannerOpenWithScan(para...) //多行扫描器
self.client.scannerOpenWithStop(para...) //区间扫描器
self.client.scannerOpenWithPrefix(para...) //以xxx开头的row的前缀扫描器
self.client.scannerOpenTs(para...) //查询小于某个时间的记录集
//scannerOpenTs(table,"",None, 1488791536402L, None)
接着就开始扫描,它是以scannerGet开头的
result = self.client.scannerGet(scanner) //如果上面定义的是单行扫描器,就用它
result = self.client.scannerGetList(id, 30) //如果上面定义的是多行扫描器,就用它
所以你要知道,虽然这两个result都是TRowResult类型,但数据类型是不一样的,一个是集合,一个是单行。
接下来介绍一下如何解析TRowResult
首先拿到id
id = client.scannerOpenWithScan(tableName, TScan(), None)
如果是拿多行数据
//拿30行数据
result = self.client.scannerGetList(id, 30)
如果是拿单行数据
result = self.client.scannerGet(id)
这两种方式都会返回一个TRowResult的对象结果集,大概是这个样子的
TRowResult(sortedColumns=None, columns={
'info:gisx': TCell(timestamp=1488510046531L, value='121.481677'), 'info:gisy': TCell(timestamp=1488510046531L, value='31.303407'), 'type:': TCell(timestamp=1488510046531L, value='4')}, row='row0')
TRowResult(sortedColumns=None, columns={
'info:gisx': TCell(timestamp=1488510046536L, value='121.577649'), 'info:gisy': TCell(timestamp=1488510046536L, value='31.294134'), 'type:': TCell(timestamp=1488510046536L, value='4')}, row='row1')
TRowResult(sortedColumns=None, columns={
'info:gisx': TCell(timestamp=1488510046556L, value='121.39321899'), 'info:gisy': TCell(timestamp=1488510046556L, value='31.2781105'), 'type:': TCell(timestamp=1488510046556L, value='4')}, row='row10')
TRowResult(sortedColumns=None, columns={
'info:gisx': TCell(timestamp=1488510046949L, value='121.30570984'), 'info:gisy': TCell(timestamp=1488510046949L, value='31.14129066'), 'type:': TCell(timestamp=1488510046949L, value='4')}, row='row100')
TRowResult(sortedColumns=None, columns={
'info:gisx': TCell(timestamp=1488510048712L, value='121.364975'), 'info:gisy': TCell(timestamp=1488510048712L, value='31.224097'), 'type:': TCell(timestamp=1488510048712L, value='4')}, row='row1000')
TRowResult(sortedColumns=None, columns={