gpt4 book ai didi

python - 如何使用单个 API 调用扫描 HappyBase 中的多组行?

转载 作者:行者123 更新时间:2023-12-04 10:08:16 24 4
gpt4 key购买 nike

我想扫描一个大表以获取 ID 列表(或 ID 前缀)(使用 Python HappyBase)。

有没有办法在服务器端做到这一点?也就是说,我想在一个 API 调用中发送要扫描的开始/停止行列表,而不是执行一长串 API 调用。

这是一个例子。对于 my_big_tables 键:

2019/1
2019/2
2019/3
...
2020/1
2020/2
2020/3
2020/4
..

在一个查询中,我想获取所有年份的第 1 个月和第 2 个月的所有记录。结果应该是:
2019/1
2019/2
2020/1
2020/2

最佳答案

而不是使用 row_startrow_stop Table.scan() 中的参数,这可能更适合 filter带正则表达式的参数。

API reference有关过滤器参数的详细信息:

The keyword argument filter is also supported (beyond column and row range filters supported here). HappyBase / HBase users will have used this as an HBase filter string. (See the Thrift docs for more details on those filters.) However, Google Cloud Bigtable doesn’t support those filter strings so a RowFilter should be used instead.



RowFilter 是 Google 的 Bigtable 库提供的一种类型。 Here are the docs .假设您所指的 ID 字段是您的行键,我们可以使用 RowKeyRegexFilter按您描述的模式过滤 ID。

我们将首先提出一个正则表达式来匹配所需月份的 ID 列表。例如,如果您想过滤 12 月和 1 月的基于年份的 ID,您可以使用它(请注意,您必须从最大数字到最短数字)——请参阅 this link测试正则表达式:
\d\d\d\d\/(12|1)

这里尝试编写一个函数,该函数使用适当的过滤器创建 Google Bigtable HappyBase 扫描调用,其中 table是一个HappyBase 表和 months是一个整数列表。请注意,我有 不是 测试了这段代码,但希望它至少给你一个起点。
from google.cloud.bigtable.row_filters import RowKeyRegexFilter

def filter_by_months(table, months):
months_reversed = sorted(months, reverse=True)
months_strings = [str(month) for month in months_reversed]
months_joined = "|".join(months_strings)

key_filter = RowKeyRegexFilter('\d\d\d\d\/({})'.format(months_joined))
return table.scan(filter=key_filter)

关于python - 如何使用单个 API 调用扫描 HappyBase 中的多组行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61461759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com