0

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

这可能吗?

4

2 回答 2

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一种更灵活、更强大的方法是使用 to 的参数指定过滤器字符串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

于 2013-11-27T20:39:19.770 回答
1

我不熟悉 HBase 的语法。这是我使用的happybase-python 代码,它对我有用。感谢Wouter Bolsterlee!与'columns' 语句不同,您不必将'columnFamily' 放在'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
于 2015-06-02T20:16:57.920 回答