python - 使用 Python SDK 按前缀扫描 Bigtable

标签 python google-cloud-bigtable happybase

我正在尝试使用 Python SDK 在 Google Cloud Bigtable 上按多个前缀执行搜索。我正在使用 read_rows,但我看不到显式按前缀搜索的好方法。

我的第一个选择是RowSet + RowRange。我正在测试三个查询,我得到的时间是 ~1.5s、~3.5s 和~4.2s,这比使用 Node SDK(具有过滤器)的搜索慢了一个数量级选项) ~0.19、~0.13、~0.46。

第二个选项是使用RowFilterChain + RowKeyRegexFilter。其中两个查询的性能非常糟糕:~3.1s、~70s、~75s~0.124s、~72s、~69s。看起来它正在进行全面扫描。这是代码部分:

            regex = f'^{prefix}.*'.encode()
            filters.append(RowKeyRegexFilter(regex)) 

我的第三个选择是使用基于 Happybase 的替代 SDK,它具有前缀过滤功能。这样,我得到了~36s、~3s、~1s~0.4、~0.1、~0.17。第一个查询涉及多个前缀,并且它似乎不支持同一请求中的多个过滤,因此我执行与前缀一样多的请求,然后连接迭代器。另外两个似乎利用了前缀过滤器。

更新:我第一次删除是因为环境有错误。正确执行后,范围查询的时间还不错,但似乎还有改进的空间,因为 Happybase 测试在利用前缀搜索时仍然更快。

希望获得有关在 Happybase 中使用多个前缀搜索或在主 Python SDK 中使用实际前缀搜索的帮助。

最佳答案

read_rows方法有两个参数start_keyend_key您可以使用它根据行键有效过滤行(请参阅 docs )。在幕后,此方法执行扫描,因此这可能是根据行键过滤行的最有效方法。

例如,假设您的表中有以下行键:

a
aa
b
bb
bbb

并且您想要检索行键前缀为 a 的所有行,你可以运行:

rows_with_prefix_a = my_table.read_rows(start_key="a", end_key="b")

这只会扫描 a 之间的行和b (b 除外),因此这将返回行键前缀为 a 的所有行。 (上一个示例中的 aaa)。

关于python - 使用 Python SDK 按前缀扫描 Bigtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56329790/

相关文章:

google-cloud-dataflow - 从 Dataflow 管道中间读取 Bigtable 数据

python - 无法在 Python 中使用 Happybase 创建简单表

python - AWS Hbase : Invalid method name: 'getTableNames'

python - 使用 python 连接到 Hbase 失败

python - 如何在 pandas 数据框中选择特定值并将其替换为 NaN。如何从每个 1 级多索引中删除列

python - 你如何在 TensorFlow 中将渐变固定到某个 GPU?

python - Kivy - 错误 : "object has no attribute" when I called it from . kv 文件

gcloud - 尝试从 Google SDK 运行 cbt(Cloud Bigtable 命令行工具)

python - 二维 FFT 显示高于奈奎西极限的意外频率

Bigtable:在行键上使用时间戳时避免热点