Python 如何使用单个API调用扫描HappyBase中的多组行?
我想扫描一个大表,查找ID列表(或ID前缀)(使用Python HappyBase) 有什么方法可以在服务器端完成吗?也就是说,我希望在一个API调用中发送要扫描的开始/停止行列表,而不是执行一系列的API调用 这里有一个例子。对于我的大桌子键:Python 如何使用单个API调用扫描HappyBase中的多组行?,python,google-cloud-platform,bigtable,happybase,Python,Google Cloud Platform,Bigtable,Happybase,我想扫描一个大表,查找ID列表(或ID前缀)(使用Python HappyBase) 有什么方法可以在服务器端完成吗?也就是说,我希望在一个API调用中发送要扫描的开始/停止行列表,而不是执行一系列的API调用 这里有一个例子。对于我的大桌子键: 2019/1 2019/2 2019/3 ... 2020/1 2020/2 2020/3 2020/4 .. 在一个查询中,我想获得所有年份的第1个月和第2个月的所有记录。结果应该是: 2019/1 2019/2 2020/1 2020/2 与使
2019/1
2019/2
2019/3
...
2020/1
2020/2
2020/3
2020/4
..
在一个查询中,我想获得所有年份的第1个月和第2个月的所有记录。结果应该是:
2019/1
2019/2
2020/1
2020/2
与使用Table.scan()中的
row\u start
和row\u stop
参数不同,这可能更适合使用正则表达式的filter
参数
有关筛选器参数的详细信息,请参见:
还支持关键字参数过滤器
(除列和行之外)
此处支持范围筛选器)。HappyBase/HBase用户将使用
这是一个HBase筛选器字符串。(有关更多详细信息,请参阅
但是,Google Cloud Bigtable不支持
这些筛选器字符串,因此应改用RowFilter
RowFilter是Google的Bigtable库提供的一种类型。假设您引用的ID字段是您的行键,我们可以使用您描述的模式来过滤ID
我们将首先使用正则表达式来匹配所需月份的ID列表。例如,如果要筛选12月和1月的基于年份的ID,可以使用以下方法(注意,必须从最大的数字到最短的数字)——请参阅测试正则表达式:
\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)
谢谢你赏金!如果这个答案对你有效,你能把它标为已解决吗?