将正则表达式传递给happybase扫描中的列属性

时间:2013-10-01 01:54:15

标签: python regex hbase happybase

我正在尝试将一个正则表达式列表传递给我的happybase扫描调用中的columns属性。这是因为,我的coloumn名称是通过动态附加id来制作的,我在扫描时没有访问这些ID。

这可能吗?

2 个答案:

答案 0 :(得分:3)

HappyBase作者在这里。

根据Thrift API,您可以在columns API系列的ScannerOpen()参数中传递正则表达式(请参阅http://svn.apache.org/viewvc/hbase/trunk/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift?view=markup#l717)。但是,HappyBase使用的Thrift API是ScannerOpenWithScan(),它使用TScan结构(请参阅http://svn.apache.org/viewvc/hbase/trunk/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift?view=markup#l141),它不包含任何有关正则表达式的注释。实际上我不知道(没有测试)这是否有效。

更灵活,更强大的方法是使用filter happybase.Table.scan()参数指定过滤字符串。有关过滤字符串语法,请参阅http://hbase.apache.org/book/thrift.html。在你的情况下,"ColumnPrefixFilter('theprefix')"之类的东西应该可以解决问题。有关HappyBase API,请参阅http://happybase.readthedocs.org/en/latest/api.html#happybase.Table.scan

答案 1 :(得分:1)

我不熟悉HBase的语法。这是我使用的happybase-python代码,它适用于我。感谢Wouter Bolsterlee !!不喜欢'列'声明,您不必将“家庭”列为“家庭”。在' ColumnPrefixFilter'。

import happybase
pool = happybase.ConnectionPool(size=3, host='172.xx.xx.xx')
with pool.connection() as conn1:
    hbaseTable = conn1.table('HBase_table_name_here')
    for rowKey, rowData in hbaseTable.scan(row_prefix= 'year-2015-', filter="ColumnPrefixFilter('month-06')", limit = 6):
        print rowData