【问题标题】:Perform a google.cloud.happybase Bigtable RowKeyRegexFilter Scan执行 google.cloud.happybase Bigtable RowKeyRegexFilter 扫描
【发布时间】:2017-08-23 18:17:40
【问题描述】:

更新:这仅适用于 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

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

【问题讨论】:

  • 我建议为此创建一个 github 问题。
  • 我已经将它添加到 Google Groups 但没关系@SolomonDuskis 我也将它添加到 github,我觉得世界上唯一一个尝试这样做的人:(
  • github.com/GoogleCloudPlatform/google-cloud-python-happybase/… 让我们看看是否有人看到这个,看起来像一个错误,但也许我使用它很糟糕,问题是经过数小时的谷歌搜索后,网络上没有文档或示例

标签: python google-cloud-platform google-cloud-bigtable happybase


【解决方案1】:

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

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

【讨论】:

  • 模拟器文档中注明了这一特殊限制:cloud.google.com/bigtable/docs/emulator。它只影响二进制正则表达式过滤器。
  • 你是对的,我的错我理解错了,实际上它们在大多数情况下都不起作用,但它确实被注释了。
猜你喜欢
  • 2018-04-05
  • 2018-11-03
  • 1970-01-01
  • 2019-10-13
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
相关资源
最近更新 更多