python使用happybase thrift库实现hbase的scan搜索

原文链接是在    http://xiaorui.cc 

我想有些人可能不太懂python thrift scan的用法,我这边写个我自己常用的一个场景实现,查看某个列族里面以xxx开头的 …  恩, 先用happybase实现一个简单的scan,row_prefix的实现… …

跑完简单的例子,咱们来看下happybase scan函数的具体描述… …


除了用row_start,row_stop 这样的rowkey来控制数据扫描的范围外…. 如果你的rowkey是那种无时间特性的,那么你肯定会想用 setTimeRange来控制scan扫描的范围。。。。   下面是在hbase shell下进行的…. 

hbase(main):073:0> scan ‘t1′, { TIMERANGE => [1362672126412, 1362672134437]}
ROW                                      COLUMN+CELL                                                                                                         
 row1                                    column=f1:a, timestamp=1362672126412, value=value1                                                                  
1 row(s) in 0.0060 seconds

hbase(main):074:0> scan ‘t1′, { TIMERANGE => [1362672126412, 1362672134438]}
ROW                                      COLUMN+CELL                                                                                                         
 row1                                    column=f1:a, timestamp=1362672126412, value=value1                                                                  
 row1                                    column=f1:b, timestamp=1362672134437, value=value2                                                                  
1 row(s) in 0.0070 seconds

但是问题来了,查了下happybase和python原生的thrift库,都是不支持timestamp时间范围扫描的… 不支持的原因主要是thrift serve人不支持timestamp range  

我在国外的论坛看到了解决的办法,是使用hbase stargate做restful api服务。 

Cell or Row Query (Multiple Values)

GET /<table>/<row> 
  ( / ( <column> ( : <qualifier> )? 
      ( , <column> ( : <qualifier> )? )+ )? 
    ( / ( <start-timestamp> ‘,’ )? <end-timestamp> )? )? 
  ( ?v= <num-versions> )? 

详细的stargate的文档,请关注下 http://wiki.apache.org/hadoop/Hbase/Stargate

注释:   跟朋友又看了下 happybase代码库里面的issue,有人回复thrift2是支持timerange的… … 

getTimeRange
public TTimeRange getTimeRange()
setTimeRange
public TScan setTimeRange(TTimeRange timeRange)
unsetTimeRange
public void unsetTimeRange()
isSetTimeRange
public boolean isSetTimeRange()
Returns true if field timeRange is set (has been assigned a value) and false otherwise


对Golang感兴趣的朋友可以加群: 278517979 !!!
另外如果大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码, 感谢!
另外再次标注博客原地址  xiaorui.cc

3 Responses

  1. 往往 2015年4月27日 / 上午7:37

    我们这里就因为时间范围扫描,用java了

  2. 往往 2015年4月22日 / 下午3:28

    好文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">