更新:这只发生在Google模拟器上,而不是在实际开发或生产Bigtable实例(GoogleCloudSDK149.0.0)中。
我试图通过键regex过滤器进行行过滤,一切都像符咒一样工作(按前缀过滤、按键开始和停止范围过滤、按键过滤、按键过滤),但我无法让它作为过滤器在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传递到rows方法而不是真正的行键也不会进行regex筛选,您可以看到它。
如果能在这方面提供任何帮助,我们将不胜感激。
发布于 2017-03-30 22:57:47
UPDATE:正如@gary注意到的那样,它实际上是在文档中注释的:https://cloud.google.com/bigtable/docs/emulator#filters正则表达式必须只包含有效的UTF-8字符,而实际的Cloud服务可以将正则表达式处理为任意字节。虽然像
(notmatchforsure)+这样简单的东西也不起作用,尽管它似乎包含有效的UTF8字符,但在我的测试中,我想说它是不受限制的,但一般来说,它不起作用。无论如何,在文档中是正确的警告。
实际的问题是模拟器上的bug,我更新了答案以避免错误的反馈,解决方案是创建一个用于测试代码的开发实例,所以现在如果您想要在BigTable中使用Regex过滤器进行一些开发,您必须创建(并支付.)至少一个开发实例(响应时为0.65美元/小时,0.17美元/GB)。希望这会有帮助,就好像有人在期待着和仿真器一起玩一样,他可以像我一样被困住几个小时。
https://stackoverflow.com/questions/43107422
复制相似问题