0

更新:这只发生在 Google Cloud Bigtable Emulator 上,而不是实际开发或生产 BigTable 实例(Google Cloud SDK 149.0.0)

我正在尝试通过键正则表达式过滤器进行行过滤,一切都像魅力一样工作(按前缀过滤,按键开始和停止范围过滤,按键,按键),但我无法让它通过RowKeyRegexFilteras过滤器,它只是将所有键作为空键返回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)+正则表达式,我都找不到任何带有工作示例的文档,最令人惊奇的是,google.cloud.happybase.table.Table.rows它总是按行键执行过滤器RowKeyRegexFilter,但是将正则表达式传递给rows方法而不是真正的行键'也不给正则表达式过滤,你可以看到它

在这里:https ://github.com/GoogleCloudPlatform/google-cloud-python-happybase/blob/master/src/google/cloud/happybase/table.py#L197

在这里:https ://github.com/GoogleCloudPlatform/google-cloud-python-happybase/blob/master/src/google/cloud/happybase/table.py#L971

对此的任何帮助将不胜感激

4

1 回答 1

0

更新:正如@gary-elliott 所注意到的,它实际上在文档中进行了注释:https ://cloud.google.com/bigtable/docs/emulator#filters 正则表达式必须只包含有效的 UTF-8 字符,这与实际的 Cloud Bigtable 服务不同它可以将正则表达式处理为任意字节。尽管一些简单的东西(notmatchforsure)+似乎也不起作用,尽管它似乎包含有效的 UTF8 字符,但在我的测试中,我会说它不受限制,但一般来说不起作用。无论如何在文档中都得到了正确的警告。

实际问题是模拟器上的一个错误,我更新了答案以避免误导性反馈,解决方案是创建一个开发实例来测试代码,所以现在如果你想在 BigTable 中使用 Regex 过滤器进行一些开发,你必须创建(并支付......)至少一个开发实例(0.65 美元/小时,响应时 0.17 美元/GB)。希望这会有所帮助,就好像有人希望玩模拟器一样,他可能会像我一样卡住几个小时。

于 2017-03-30T22:57:47.590 回答