更新:这只适用于Google Cloud Bigtable Emulator,而不适用于实际开发或生产BigTable实例(Google Cloud SDK 149.0.0)
我正在尝试通过Key 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)+
作为正则表达式,我都找不到任何带有工作示例的文档,最令人惊奇的是google.cloud.happybase.table.Table.rows
执行了按行键排序始终使用RowKeyRegexFilter
,但将正则表达式传递给rows
方法而不是实际行键也不会给出正则表达式过滤,您可以看到它
对此的任何帮助都将非常感激
答案 0 :(得分:0)
更新:它实际上是在@ gary-elliott注意到的文档中注释的:https://cloud.google.com/bigtable/docs/emulator#filters 正则表达式必须只包含有效的UTF-8字符,这与实际的Cloud Bigtable服务不同,后者可以将正则表达式作为任意字节处理。虽然像
(notmatchforsure)+
这样简单的东西不起作用,但它似乎包含有效的UTF8字符,在我的测试中我会说它不受限制,但一般来说不起作用。无论如何都在文档中正确警告。
实际问题是模拟器上的 bug ,我更新了答案以避免误导反馈,解决方案是创建一个用于测试代码的开发实例,所以现在如果你想做在BigTable中使用Regex过滤器进行一些开发,你必须创建(并支付......)至少一个开发实例(每小时0.65美元,在响应时为0.17美元/ GB)。希望这有助于好像有人期待与模拟器一起玩,他可以像我一样被困几个小时。