Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用单个API调用扫描HappyBase中的多组行?_Python_Google Cloud Platform_Bigtable_Happybase - Fatal编程技术网

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

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 与使

我想扫描一个大表,查找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

与使用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)

谢谢你赏金!如果这个答案对你有效,你能把它标为已解决吗?