与其在 Table.scan() 中使用row_start
androw_stop
参数,这可能更适合filter
带有正则表达式的参数。
有关filter 参数的详细信息,请参阅API 参考:
还支持关键字参数filter
(此处支持的列和行范围过滤器除外)。HappyBase / HBase 用户将使用它作为 HBase 过滤器字符串。(有关这些过滤器的更多详细信息,请参阅Thrift 文档。)但是,Google Cloud Bigtable 不支持这些过滤器字符串,因此RowFilter
应该使用 a。
RowFilter 是 Google 的 Bigtable 库提供的一种类型。这是文档。假设您所指的 ID 字段是您的行键,我们可以使用RowKeyRegexFilter根据您描述的模式过滤 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)