【问题标题】:Happybase filtering using rows function使用 rows 函数的 Happybase 过滤
【发布时间】:2016-08-26 14:56:45
【问题描述】:

我想使用 Happybase 对一些已知的行键执行rows 查询,并添加一个值过滤器,以便只返回与过滤器匹配的行。

在 HBase shell 中,您可以为 get 命令提供过滤器,如下所示:

get 'meta', 'someuser', {FILTER => "SingleColumnValueFilter ('cf','gender',=,'regexstring:^male$')"}

在 Happybase 中,您可以向 scan 命令添加过滤器,但我在 rows 查询中看不到该选项。以下是scan 的工作原理:

rows = tab.scan(filter="SingleColumnValueFilter('cf','gender',=,'regexstring:^male$')")

有没有办法使用 Happybase(或任何其他 Python HBase 客户端库)执行过滤的 rows 查询(可能是随机排序的行键)?

我想象它看起来像这样(但没有过滤器参数):

rows = tab.rows(rows=['h_key', 'a_key', 'z_key'], filter="SingleColumnValueFilter('cf','gender',=,'regexstring:^male$')")

【问题讨论】:

    标签: python hbase happybase


    【解决方案1】:

    Get with filter 等于 Scan with start/stop row。

    rows = tab.scan(filter="SingleColumnValueFilter('cf','gender',=,'regexstring:^male$')",
                         row_start="someuser", row_stop="someuser")
    

    在 Java 中,FilterList 组合 MultiRowRangeFilterSingleColumnValueFilter 将完全满足您的需求,并且有一个 example 与此相关。

    但是,由于happyhbase 使用 Hbase Thrift 服务,而且似乎 don't support FilterList,所以我认为你能得到的最好的方法是为你的示例中的每个键调用上述过程。

    【讨论】:

    • 经过反思,我遗漏了一些问题,我将对其进行编辑。我要执行的查询是对一组随机排序的行键的rows 查询。我不能使用行键范围,因为顺序未知。
    • @dsimmie 更新答案,我认为当前的happybase 版本没有完美的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 2016-04-09
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多