Python 执行google.cloud.happybase Bigtable RowKeyRegexFilter扫描

Python 执行google.cloud.happybase Bigtable RowKeyRegexFilter扫描,python,google-cloud-platform,google-cloud-bigtable,happybase,Python,Google Cloud Platform,Google Cloud Bigtable,Happybase,更新:这仅适用于Google Cloud Bigtable Emulator,而不适用于实际开发或生产的Bigtable实例(Google Cloud SDK 149.0.0) 我正在尝试按键进行行过滤正则表达式过滤器,一切都像一个符咒一样工作(按前缀过滤、按键开始和停止范围过滤、按键过滤、按键过滤),但我无法将其作为过滤器传入RowKeyRegexFilter,它只是将所有键作为空键返回scan: # all the boilerplate to create a happybase conn

更新:这仅适用于Google Cloud Bigtable Emulator,而不适用于实际开发或生产的Bigtable实例(Google Cloud SDK 149.0.0)

我正在尝试按键进行行过滤正则表达式过滤器,一切都像一个符咒一样工作(按前缀过滤、按键开始和停止范围过滤、按键过滤、按键过滤),但我无法将其作为过滤器传入
RowKeyRegexFilter
,它只是将所有键作为空键返回
scan

# all the boilerplate to create a happybase connection skipped 
t = connection.table("sometable")
t.put(
    b'row1',
    {
       b"family1:col2": b".1",
       b"family2:col2": b".12",
    }
)
t.put(
    b'row2',
    {
       b"family1:col2": b".2",
       b"family2:col2": b".22",
    }
)
t.put(
    b'row3',
    {
       b"family1:col2": b".3",
       b"family2:col2": b".32",
    }
)
rows = t.scan(
    filter=RowKeyRegexFilter(b'.+3')
)
print(len([i for i in rows])
这总是会给出
3
,无论您将
(nomatchforsure)+
作为regex,我都找不到任何具有工作示例的文档,最令人惊讶的是
google.cloud.happybase.table.table.rows
始终使用
RowKeyRegexFilter
按行键执行筛选,但是,将regex传递到
方法而不是实行键也不会提供regex过滤,您可以看到它

在这里:

在这里:

在此方面的任何帮助都将不胜感激

更新:正如@gary elliott所注意到的,文档中对其进行了注释: 正则表达式必须只包含有效的UTF-8字符,而实际的Cloud Bigtable服务可以将正则表达式作为任意字节进行处理。虽然像
(notmatchforsure)+
这样简单的东西也不起作用,尽管它似乎包含有效的UTF8字符,但在我的测试中,我会说它不受限制,但一般来说不起作用。无论如何,在文档中警告是正确的


实际问题是emulator上有一个bug,我更新了答案以避免误导性反馈,解决方案是创建一个开发实例来测试代码,所以现在如果你想在BigTable中使用正则表达式过滤器进行开发,你至少要创建一个开发实例(并为此付费)(0.65美元/小时,响应时为0.17美元/GB)。希望这能起到帮助作用,就像有人希望玩emulator一样,他可能会像我一样被困几个小时。

我建议为此创建一个github问题。我已经将它添加到Google Groups中,但没关系@SolomonDuskis我也将它添加到github中,我感觉世界上唯一一个尝试这样做的人:(让我们看看是否有人看到了这一点,看起来像一个bug,但可能我使用得很糟糕,问题是在几个小时的谷歌搜索后,网络上没有任何文档或示例。模拟器的文档中指出了这一特殊限制:。它只影响二进制正则表达式过滤器。你是对的,我不好,我理解得不好,实际上它们不是在大多数情况下都使用rking,但它实际上是经过注释的。