Вместо использования аргументов row_start
и row_stop
в Table.scan () это может быть лучше подходит для аргумента filter
с регулярным выражением.
См. Ссылка API для получения подробной информации об аргументе фильтра:
Аргумент ключевого слова filter
также поддерживается (помимо фильтров диапазона столбцов и строк, поддерживаемых здесь). Пользователи HappyBase / HBase будут использовать это как строку фильтра HBase. (Подробнее об этих фильтрах см. Комиссионные документы .) Однако Google Cloud Bigtable не поддерживает эти строки фильтров, поэтому вместо них следует использовать RowFilter
.
RowFilter - это тип, предоставляемый библиотекой Google Bigtable. Вот документы . Предполагая, что поле идентификатора, на которое вы ссылаетесь, является вашим ключом строки, мы можем использовать RowKeyRegexFilter , чтобы отфильтровать идентификаторы по шаблону, который вы описали.
Начнем с того, что подойдем с регулярным выражением, чтобы сопоставить список идентификаторов на нужные месяцы. Например, если вы хотите отфильтровать идентификаторы по годам за декабрь и январь, вы можете использовать это (обратите внимание, что вы должны go от самого большого числа к самому короткому) - см. эту ссылку для проверки регулярного выражения:
\d\d\d\d\/(12|1)
Вот попытка написать функцию, которая создает Google Scantable запрос на сканирование 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)