Использование фильтров в HBase

Обзор

HBase в ADH предоставляет язык фильтров Thrift (Thrift filter language). Он позволяет фильтровать результаты чтения данных из HBase при использовании команд get и scan. Фильтрация происходит на стороне сервера и нагрузку на HBase не уменьшает. Однако уменьшается нагрузка на сеть, поскольку клиенту передается меньше данных. Фильтры могут использоваться как при взаимодействии через Java API, так и в консоли HBase shell.

Синтаксис фильтров HBase

Простой фильтр

Простой фильтр задается строкой следующего вида:

"<FilterName> (<arg1>, <arg2>, ..., <argN>)"

где:

Пример использования простого фильтра в консоли HBase shell:

scan 'articles', { FILTER => "ColumnPaginationFilter (2, 1)"}

Полный набор аргументов — это условие фильтра. Различные индивидуальные фильтры могут принимать разное количество аргументов — от нуля и более.

Аргументы могут иметь следующие типы:

Метки времени

В консоли HBase shell метки времени в результатах чтения таблиц отображаются в человекочитаемом формате. Однако, если фильтр требует метку времени в качестве значения аргумента, она должна быть задана в формате эпохи Unix. Для преобразования меток времени из одного формата в другой используйте онлайн-инструменты, например EpochConverter.

ПРИМЕЧАНИЕ
Для меток времени в HBase требуется точность до миллисекунд. Вам потребуется вручную дописывать миллисекунды к меткам времени после преобразования в формат эпохи Unix.

Операторы сравнения и компараторы

Операторы сравнения и компараторы используются в аргументах фильтров для составления условий лексикографических соответствий и сравнений.

Следующие операторы сравнения используются в качестве аргументов фильтра.

Операторы сравнения
Синтаксис Описание

<

Меньше

>

Больше

=

Равно

<=

Меньше или равно

>=

Больше или равно

!=

Не равно

Следующие компараторы используются в качестве аргументов фильтра.

Компараторы
Название Описание Пример

BinaryComparator

Лексикографически сравнивает с заданной строкой

(>, 'binary:arc')

Такой компаратор соответствует всему, что лексикографически больше чем arc

BinaryPrefixComparator

Лексикографически сравнивает с заданной строкой. Сравнение выполняется только до длины этой строки

(=, 'binaryprefix:bot')

Такой компаратор соответствует всему, что начинается с bot

RegexStringComparator

Лексикографически сравнивает с заданным регулярным выражением для строки. С этим компаратором можно использовать только операторы сравнения = и !=

(!=, 'regexstring:be*ng')

Такой компаратор соответствует любой строке, кроме тех, которые начинаются с be и заканчиваются на ng

SubStringComparator

Ищет заданную подстроку без учета регистра. С этим компаратором можно использовать только операторы сравнения = и !=

(!=, substring:con)

Такой компаратор соответствует любой строке, кроме тех, в которых содержится con

Правила синтаксиса фильтров

 
Синтаксис фильтров подчиняется следующим правилам:

  • Выражение фильтра должно быть заключено в двойные кавычки (").

  • Именем фильтра должно быть одно слово. Допустимы любые ASCII-символы, кроме круглых скобок, одинарных кавычек и пробелов.

  • Аргументы должны быть разделены запятыми и все вместе заключены в круглые скобки.

  • Строковые аргументы должны быть каждый по отдельности заключены в одинарные кавычки (').

  • Аргументы других типов (целое, логический, оператор сравнения и т.д.) не должны заключаться в кавычки.

  • Аргументы фильтра могут содержать любые ASCII-символы. Однако если в аргументе присутствуют одинарные кавычки — каждая из них должна быть экранирована дополнительной одинарной кавычкой.

Составной фильтр

Составной фильтр состоит из индивидуальных фильтров, объединенных логическими операторами. Существуют бинарные и унарные логические операторы. Бинарные операторы объединяют фильтры слева и справа от себя:

  • AND — пара ключ/значение возвращается только если она удовлетворяет обоим фильтрам.

  • OR — пара ключ/значение возвращается, если она удовлетворяет любому из фильтров.

Унарные операторы предшествуют фильтру и меняют его поведение:

  • SKIP — если одна из пар ключ/значение не удовлетворяет условию фильтра, то вся строка отбрасывается.

  • WHILE — для каждой строки пары ключ/значение продолжают извлекаться до тех пор, пока одна из них не перестанет удовлетворять условию фильтра.

Используйте скобки для определения порядка обработки индивидуальных фильтров в составных фильтрах. Пример:

(<Filter1> OR <Filter2>) AND (<Filter3> OR <Filter4>)

Сначала обрабатывается результат объединения фильтров <Filter1> и <Filter2> оператором OR. Затем то же самое происходит с фильтрами <Filter3> и <Filter4>. В конце эти два результата объединяются оператором AND.

Логические операторы и скобки имеют следующие приоритеты, от высшего к низшему:

  1. скобки;

  2. SKIP и WHILE (имеют равный приоритет);

  3. AND;

  4. OR.

Пример использования составного фильтра в консоли HBase shell:

scan 'articles', { FILTER => "ColumnPaginationFilter (2, 1) AND PrefixFilter ('co')"}

Индивидуальные фильтры в HBase

Представленные в HBase индивидуальные фильтры и их синтаксис перечислены ниже. Примеры запросов выполнены для тестовой таблицы, заполненной значениями из тестового файла people.csv. Этот файл является расширенной версией тестового файла, использованного в статье Массовая загрузка с использованием встроенных задач MapReduce. Используйте инструкции из этой статьи, если хотите создать такую же тестовую таблицу, которая используется здесь. В этом случае следует использовать видоизмененную команду для запуска задачи ImportTsv: вместо флага -Dimporttsv.columns=HBASE_ROW_KEY,basic:age задайте -Dimporttsv.columns=HBASE_ROW_KEY,basic:age,location:town,location:state,location:country. При необходимости, соответствующим образом замените имена файла и таблицы в команде.

Ключами строк таблицы являются имена людей. Первое семейство столбцов называется basic и имеет единственный квалификатор age. Второе семейство столбцов называется location и имеет три квалификатора: country, state и town. В таблице 997 строк.

KeyOnlyFilter

 
Возвращает ключ из каждой пары ключ/значение. Не принимает аргументов.

Синтаксис:

"KeyOnlyFilter ()"

Пример команды:

scan 'people', { FILTER => "KeyOnlyFilter ()" }

Результат (последние 8 ключей):

 ...
 Zimmerman Gene                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=
 Zimmerman Gene                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=
 Zimmerman Gene                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=
 Zimmerman Gene                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=
 Zimmerman Madge                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=
 Zimmerman Madge                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=
 Zimmerman Madge                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=
 Zimmerman Madge                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=
997 row(s)
Took 0.5022 seconds
FirstKeyOnlyFilter

 
Возвращает первую пару ключ/значение из каждой строки. Не принимает аргументов.

Синтаксис:

"FirstKeyOnlyFilter ()"

Пример команды:

scan 'people', { FILTER => "KeyOnlyFilter ()" }

Результат (первые и последние пять пар ключ/значение):

ROW                                              COLUMN+CELL
 Abbott Delia                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=62
 Abbott Howard                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Abbott Jack                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Adams Clyde                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Aguilar Myrtie                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=23
 ...
 Young Della                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=21
 Young Josephine                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Young Mattie                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=39
 Zimmerman Gene                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=35
 Zimmerman Madge                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=46
997 row(s)
Took 0.1058 seconds
PrefixFilter

 
Возвращает все пары ключ/значение из тех строк, чьи ключи начинаются с префикса, заданного аргументом. Принимает один аргумент: префикс ключа строки.

Синтаксис:

"PrefixFilter ('Roy')"

Пример команды:

scan 'people', { FILTER => "PrefixFilter ('Roy')" }

Результат:

ROW                                             COLUMN+CELL
 Roy Alfred                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=55
 Roy Alfred                                     column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Roy Alfred                                     column=location:state, timestamp=2024-07-30T08:10:19.297, value=Chihuahua
 Roy Alfred                                     column=location:town, timestamp=2024-07-30T08:10:19.297, value=Juarez
 Roy Belle                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=35
 Roy Belle                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Roy Belle                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=AZ
 Roy Belle                                      column=location:town, timestamp=2024-07-30T08:10:19.297, value=Nogales
 Roy Lora                                       column=basic:age, timestamp=2024-07-30T08:10:19.297, value=52
 Roy Lora                                       column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Roy Lora                                       column=location:state, timestamp=2024-07-30T08:10:19.297, value=Yucatan
 Roy Lora                                       column=location:town, timestamp=2024-07-30T08:10:19.297, value=Uman
 Roy Ronald                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=63
 Roy Ronald                                     column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Roy Ronald                                     column=location:state, timestamp=2024-07-30T08:10:19.297, value=California Baja
 Roy Ronald                                     column=location:town, timestamp=2024-07-30T08:10:19.297, value=Mexicali
4 row(s)
Took 0.0252 seconds
ColumnPrefixFilter

 
Возвращает все пары ключ/значение из тех столбцов, чьи квалификаторы начинаются с префикса, заданного аргументом. Принимает один аргумент: префикс квалификатора столбца.

Синтаксис:

"ColumnPrefixFilter ('tow')"

Пример команды:

scan 'people', { FILTER => "ColumnPrefixFilter ('tow')" }

Поскольку все строки тестовой таблицы имеют непустые значения для всех столбцов, такой фильтр вернет либо 0 результатов, если ни один из квалификаторов столбцов не имеет заданного префикса, либо все 997, если такой квалификатор есть. Приведенная выше команда вернет 997 пар ключ/значение, первые и последние пять из которых приведены ниже:

ROW                                             COLUMN+CELL
 Abbott Delia                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Abbott Howard                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Baton Rouge
 Abbott Jack                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Juarez
 Adams Clyde                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Lafayette
 Aguilar Myrtie                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Uman
 ...
 Young Della                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Chetumal
 Young Josephine                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Redding
 Young Mattie                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=San Jose
 Zimmerman Gene                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Tijuana
 Zimmerman Madge                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Nogales
997 row(s)
Took 0.1360 seconds
MultipleColumnPrefixFilter

 
Возвращает все пары ключ/значение из тех столбцов, чьи квалификаторы начинаются с любого из префиксов, заданных аргументами. Принимает один или несколько аргументов: префиксы квалификаторов столбцов. В случае единственного аргумента работает как фильтр ColumnPrefixFilter.

Синтаксис:

"MultipleColumnPrefixFilter ('sta', 'tow')"

Пример команды:

scan 'people', { FILTER => "MultipleColumnPrefixFilter ('sta', 'tow')" }

Здесь происходит то же, что и в предыдущем примере (фильтр ColumnPrefixFilter): поскольку все строки тестовой таблицы имеют непустые значения для всех столбцов, такой фильтр вернет либо 0 результатов, если ни один из квалификаторов столбцов не имеет какого-либо из заданных префиксов, либо все 997 на каждый найденный квалификатор. Если один из заданных префиксов является префиксом другого (например, to и tow), количество результатов не увеличивается. Приведенная выше команда вернет 997 пар ключ/значение, первые и последние пять из которых приведены ниже:

ROW                                             COLUMN+CELL
 Abbott Delia                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Abbott Delia                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Abbott Howard                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Abbott Howard                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Baton Rouge
 Abbott Jack                                    column=location:state, timestamp=2024-07-30T08:10:19.297, value=Chihuahua
 Abbott Jack                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Juarez
 ...
 Young Mattie                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=CA
 Young Mattie                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=San Jose
 Zimmerman Gene                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=California Baja
 Zimmerman Gene                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Tijuana
 Zimmerman Madge                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=AZ
 Zimmerman Madge                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Nogales
997 row(s)
Took 0.1360 seconds
ColumnCountGetFilter

 
Возвращает заданное аргументом количество столбцов в строке, начиная с первого. Этот фильтр корректно работает только с отдельными строками, поэтому его следует использовать с командой get. Использование этого фильтра с командой scan не приводит к ошибке, но возвращает некорректный результат. Принимает один аргумент: количество столбцов.

Синтаксис:

"ColumnCountGetFilter (3)"

Пример команды:

get 'people', 'Abbott Delia', { FILTER => "ColumnCountGetFilter (3)" }

Результат:

COLUMN                                         CELL
 basic:age                                     timestamp=2024-07-30T08:10:19.297, value=62
 location:country                              timestamp=2024-07-30T08:10:19.297, value=USA
 location:state                                timestamp=2024-07-30T08:10:19.297, value=TX
1 row(s)
Took 0.6243 seconds
PageFilter

 
Возвращает заданное аргументом количество строк таблицы, начиная с первой, из каждого региона. Принимает один аргумент: количество строк.

Синтаксис:

"PageFilter (2)"

Пример команды:

scan 'people', { FILTER => "PageFilter (2)" }

Поскольку в тестовой таблице было создано пять регионов, разделенных в точках F, K, P и W, эта команда вернет по две строки с четырьмя парами ключ/значение в каждой из каждого региона. Результат:

ROW                                             COLUMN+CELL
 Abbott Delia                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=62
 Abbott Delia                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Abbott Delia                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Abbott Delia                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Abbott Howard                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Abbott Howard                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Abbott Howard                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Abbott Howard                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Baton Rouge
 Farmer Alan                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Farmer Alan                                    column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Farmer Alan                                    column=location:state, timestamp=2024-07-30T08:10:19.297, value=Quintana Roo
 Farmer Alan                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Cancun
 Farmer Dean                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=65
 Farmer Dean                                    column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Farmer Dean                                    column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Farmer Dean                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Baton Rouge
 Keller Elmer                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Keller Elmer                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Keller Elmer                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=Quintana Roo
 Keller Elmer                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Chetumal
 Keller Flora                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=23
 Keller Flora                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Keller Flora                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Keller Flora                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Houston
 Padilla Ethan                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=61
 Padilla Ethan                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Padilla Ethan                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NV
 Padilla Ethan                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Novac
 Padilla Scott                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=28
 Padilla Scott                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Padilla Scott                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Padilla Scott                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Beaumont
 Wade Janie                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=25
 Wade Janie                                     column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Wade Janie                                     column=location:state, timestamp=2024-07-30T08:10:19.297, value=California Baja
 Wade Janie                                     column=location:town, timestamp=2024-07-30T08:10:19.297, value=Ensenada
 Wade Jerome                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=27
 Wade Jerome                                    column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Wade Jerome                                    column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Wade Jerome                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Houston
10 row(s)
Took 0.0138 seconds
ColumnPaginationFilter

 
Возвращает заданное первым аргументом (предел) количество столбцов после столбца с номером по счету, заданным вторым аргументом (отступ). Принимает два аргумента: предел и отступ.

Синтаксис:

"ColumnPaginationFilter (2, 1)"

Пример команды:

scan 'people', { FILTER => "ColumnPaginationFilter (2, 1)" }

Эта команда возвращает 1994 пары ключ/значение, первые и последние шесть из которых приведены ниже:

ROW                                            COLUMN+CELL
 Abbott Delia                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Abbott Delia                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Abbott Howard                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Abbott Howard                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Abbott Jack                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Abbott Jack                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=Chihuahua
 ...
 Young Mattie                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Young Mattie                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=CA
 Zimmerman Gene                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Zimmerman Gene                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=California Baja
 Zimmerman Madge                               column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Zimmerman Madge                               column=location:state, timestamp=2024-07-30T08:10:19.297, value=AZ
997 row(s)
Took 1.0474 seconds
InclusiveStopFilter

 
Выполняет построчное сканирование таблицы до нахождения заданного ключа строки, затем возвращает все строки вплоть до той, в которой был найден ключ, включительно. Принимает одно значение: ключ строки.

Синтаксис:

"InclusiveStopFilter (3)"

Пример команды:

scan 'people', { FILTER => "InclusiveStopFilter ('Allen Austin')" }

Результат:

ROW                                            COLUMN+CELL
 Abbott Delia                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=62
 Abbott Delia                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Abbott Delia                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Abbott Delia                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Abbott Howard                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Abbott Howard                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Abbott Howard                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Abbott Howard                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Baton Rouge
 Abbott Jack                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Abbott Jack                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Abbott Jack                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=Chihuahua
 Abbott Jack                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Juarez
 Adams Clyde                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Adams Clyde                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Adams Clyde                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Adams Clyde                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Lafayette
 Aguilar Myrtie                                column=basic:age, timestamp=2024-07-30T08:10:19.297, value=23
 Aguilar Myrtie                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Aguilar Myrtie                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=Yucatan
 Aguilar Myrtie                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Uman
 Aguilar Terry                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=65
 Aguilar Terry                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Aguilar Terry                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=CA
 Aguilar Terry                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Fresno
 Alexander Derrick                             column=basic:age, timestamp=2024-07-30T08:10:19.297, value=46
 Alexander Derrick                             column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alexander Derrick                             column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Alexander Derrick                             column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Alexander Gregory                             column=basic:age, timestamp=2024-07-30T08:10:19.297, value=54
 Alexander Gregory                             column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alexander Gregory                             column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Alexander Gregory                             column=location:town, timestamp=2024-07-30T08:10:19.297, value=Lafayette
 Alexander Leon                                column=basic:age, timestamp=2024-07-30T08:10:19.297, value=42
 Alexander Leon                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alexander Leon                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=AZ
 Alexander Leon                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Kingman
 Allen Austin                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=34
 Allen Austin                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Allen Austin                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NV
 Allen Austin                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Primm
10 row(s)
Took 0.7167 seconds
TimestampsFilter

 
Возвращает все пары ключ/значение, чьи метки времени совпадают с любой из заданных. Принимает любое количество аргументов: метки времени.

Синтаксис:

"TimestampsFilter (1721203180857, 1721316861863)"

Все пары ключ/значение в тестовой таблице имеют одну и ту же метку времени, поэтому для более наглядного результата имеет смысл поправить несколько ключей с помощью команды put:

put 'people', 'Young Mattie', 'location:town', 'Carlsbad', 1722327020000
put 'people', 'Young Mattie', 'location:state', 'NM', 1722327020000
put 'people', 'Yates Douglas', 'location:state', 'NM', 1722327020000
put 'people', 'Yates Douglas', 'location:town', 'Albuquerque', 1722327020000

Пример команды:

scan 'people', { FILTER => "TimestampsFilter (1722327020000)" }

Результат:

ROW                                            COLUMN+CELL
 Yates Douglas                                 column=location:state, timestamp=2024-07-30T08:10:20, value=NM
 Yates Douglas                                 column=location:town, timestamp=2024-07-30T08:10:20, value=Albuquerque
 Young Mattie                                  column=location:state, timestamp=2024-07-30T08:10:20, value=NM
 Young Mattie                                  column=location:town, timestamp=2024-07-30T08:10:20, value=Carlsbad
2 row(s)
Took 0.1001 seconds
RowFilter

 
Проверяет все строки и возвращает все пары ключ/значение из строки, если значение ключа этой строки удовлетворяет условию сравнения, заданного аргументами. Этот фильтр не работает с командой get. Принимает два аргумента: оператор сравнения и компаратор.

Синтаксис:

"RowFilter (>=, 'binaryprefix:B')"

Пример команды:

scan 'people', { FILTER => "RowFilter (<, 'binaryprefix:B')" }

Этот фильтр возвращает все пары ключ/значение из строк, ключи которых начинаются со значений, лексикографически меньших B. В случае нашей тестовой таблицы это означает все строки с людьми, чьи фамилии начинаются с А. Результат.

ROW                                            COLUMN+CELL
 Abbott Delia                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=62
 Abbott Delia                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Abbott Delia                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Abbott Delia                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Abbott Howard                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Abbott Howard                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Abbott Howard                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Abbott Howard                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Baton Rouge
 Abbott Jack                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Abbott Jack                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Abbott Jack                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=Chihuahua
 Abbott Jack                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Juarez
 Adams Clyde                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Adams Clyde                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Adams Clyde                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Adams Clyde                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Lafayette
 Aguilar Myrtie                                column=basic:age, timestamp=2024-07-30T08:10:19.297, value=23
 Aguilar Myrtie                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Aguilar Myrtie                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=Yucatan
 Aguilar Myrtie                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Uman
 Aguilar Terry                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=65
 Aguilar Terry                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Aguilar Terry                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=CA
 Aguilar Terry                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Fresno
 Alexander Derrick                             column=basic:age, timestamp=2024-07-30T08:10:19.297, value=46
 Alexander Derrick                             column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alexander Derrick                             column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Alexander Derrick                             column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Alexander Gregory                             column=basic:age, timestamp=2024-07-30T08:10:19.297, value=54
 Alexander Gregory                             column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alexander Gregory                             column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Alexander Gregory                             column=location:town, timestamp=2024-07-30T08:10:19.297, value=Lafayette
 Alexander Leon                                column=basic:age, timestamp=2024-07-30T08:10:19.297, value=42
 Alexander Leon                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alexander Leon                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=AZ
 Alexander Leon                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Kingman
 Allen Austin                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=34
 Allen Austin                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Allen Austin                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NV
 Allen Austin                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Primm
 Allison Dustin                                column=basic:age, timestamp=2024-07-30T08:10:19.297, value=54
 Allison Dustin                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Allison Dustin                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=Yucatan
 Allison Dustin                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Merida
 Alvarado Dominic                              column=basic:age, timestamp=2024-07-30T08:10:19.297, value=63
 Alvarado Dominic                              column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Alvarado Dominic                              column=location:state, timestamp=2024-07-30T08:10:19.297, value=California Baja
 Alvarado Dominic                              column=location:town, timestamp=2024-07-30T08:10:19.297, value=Ensenada
 Alvarado Maria                                column=basic:age, timestamp=2024-07-30T08:10:19.297, value=58
 Alvarado Maria                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Alvarado Maria                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=Chihuahua
 Alvarado Maria                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Chihuahua
 Alvarado Melvin                               column=basic:age, timestamp=2024-07-30T08:10:19.297, value=34
 Alvarado Melvin                               column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alvarado Melvin                               column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Alvarado Melvin                               column=location:town, timestamp=2024-07-30T08:10:19.297, value=Austin
 Alvarado Timothy                              column=basic:age, timestamp=2024-07-30T08:10:19.297, value=27
 Alvarado Timothy                              column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alvarado Timothy                              column=location:state, timestamp=2024-07-30T08:10:19.297, value=CA
 Alvarado Timothy                              column=location:town, timestamp=2024-07-30T08:10:19.297, value=San Francisco
 Alvarez Bessie                                column=basic:age, timestamp=2024-07-30T08:10:19.297, value=34
 Alvarez Bessie                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alvarez Bessie                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=NV
 Alvarez Bessie                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Las Vegas
 Alvarez Bruce                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=60
 Alvarez Bruce                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alvarez Bruce                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=CA
 Alvarez Bruce                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Modesto
 Alvarez Harvey                                column=basic:age, timestamp=2024-07-30T08:10:19.297, value=57
 Alvarez Harvey                                column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Alvarez Harvey                                column=location:state, timestamp=2024-07-30T08:10:19.297, value=NV
 Alvarez Harvey                                column=location:town, timestamp=2024-07-30T08:10:19.297, value=Fallon
 Alvarez Jacob                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=49
 Alvarez Jacob                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Alvarez Jacob                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=Yucatan
 Alvarez Jacob                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Merida
 Anderson Lester                               column=basic:age, timestamp=2024-07-30T08:10:19.297, value=62
 Anderson Lester                               column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Anderson Lester                               column=location:state, timestamp=2024-07-30T08:10:19.297, value=Sonora
 Anderson Lester                               column=location:town, timestamp=2024-07-30T08:10:19.297, value=Hermosillo
 Anderson Lucile                               column=basic:age, timestamp=2024-07-30T08:10:19.297, value=33
 Anderson Lucile                               column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Anderson Lucile                               column=location:state, timestamp=2024-07-30T08:10:19.297, value=Sonora
 Anderson Lucile                               column=location:town, timestamp=2024-07-30T08:10:19.297, value=Hermosillo
 Anderson Ora                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=26
 Anderson Ora                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Anderson Ora                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=Sonora
 Anderson Ora                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Nogales
 Andrews Caleb                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=22
 Andrews Caleb                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Andrews Caleb                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=Quintana Roo
 Andrews Caleb                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Cancun
 Andrews Lucy                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=33
 Andrews Lucy                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Andrews Lucy                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=AZ
 Andrews Lucy                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Kingman
 Andrews Noah                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=63
 Andrews Noah                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Andrews Noah                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=California Baja
 Andrews Noah                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Ensenada
 Andrews Susan                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=48
 Andrews Susan                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Andrews Susan                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=Yucatan
 Andrews Susan                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Merida
 Armstrong Isabella                            column=basic:age, timestamp=2024-07-30T08:10:19.297, value=49
 Armstrong Isabella                            column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Armstrong Isabella                            column=location:state, timestamp=2024-07-30T08:10:19.297, value=Sonora
 Armstrong Isabella                            column=location:town, timestamp=2024-07-30T08:10:19.297, value=Hermosillo
 Armstrong Marie                               column=basic:age, timestamp=2024-07-30T08:10:19.297, value=25
 Armstrong Marie                               column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Armstrong Marie                               column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Armstrong Marie                               column=location:town, timestamp=2024-07-30T08:10:19.297, value=Santa Fe
 Arnold Bettie                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=18
 Arnold Bettie                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Arnold Bettie                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=NV
 Arnold Bettie                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Primm
 Atkins Daisy                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=51
 Atkins Daisy                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Atkins Daisy                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=Quintana Roo
 Atkins Daisy                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Chetumal
 Atkins Gene                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=37
 Atkins Gene                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Atkins Gene                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Atkins Gene                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Austin Bertie                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=57
 Austin Bertie                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=MEX
 Austin Bertie                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=California Baja
 Austin Bertie                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Tijuana
 Austin Eugene                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=64
 Austin Eugene                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Austin Eugene                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=LA
 Austin Eugene                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Lafayette
 Austin Travis                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=53
 Austin Travis                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Austin Travis                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Austin Travis                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=El Paso
34 row(s)
Took 0.6767 seconds
FamilyFilter

 
Проверяет все столбцы и возвращает все пары ключ/значение из столбца, если имя семейства этого столбца удовлетворяет условию сравнения, заданного аргументами. Принимает два аргумента: оператор сравнения и компаратор.

Синтаксис:

"FamilyFilter (\<=, 'binaryprefix:c')"

Пример команды:

scan 'people', { FILTER => "FamilyFilter (<, 'binaryprefix:c')" }

Этот фильтр возвращает все пары ключ/значение, семейства столбцов которых начинаются со значений, лексикографически меншьших c. В случае нашей тестовой таблицы это означает весь столбец basic:age. Результат (первые и последние пять строк):

ROW                                                      COLUMN+CELL
 Abbott Delia                                            column=basic:age, timestamp=2024-07-30T08:10:19.297, value=62
 Abbott Howard                                           column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Abbott Jack                                             column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Adams Clyde                                             column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Aguilar Myrtie                                          column=basic:age, timestamp=2024-07-30T08:10:19.297, value=23
 ...
 Young Della                                             column=basic:age, timestamp=2024-07-30T08:10:19.297, value=21
 Young Josephine                                         column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Young Mattie                                            column=basic:age, timestamp=2024-07-30T08:10:19.297, value=39
 Zimmerman Gene                                          column=basic:age, timestamp=2024-07-30T08:10:19.297, value=35
 Zimmerman Madge                                         column=basic:age, timestamp=2024-07-30T08:10:19.297, value=46
997 row(s)
Took 0.4836 seconds
QualifierFilter

 
Проверяет все столбцы и возвращает все пары ключ/значение из столбца, если имя квалификатора этого столбца удовлетворяет условию сравнения, заданного аргументами. Принимает два аргумента: оператор сравнения и компаратор.

Синтаксис:

"QualifierFilter (=, 'binary:town')"

Пример команды:

scan 'people', { FILTER => "QualifierFilter (=, 'binary:town')" }

Этот фильтр возвращает все пары ключ/значение, квалификатор столбца которых строго равен town. Результат (первые и последние пять строк):

ROW                                                      COLUMN+CELL
 Abbott Delia                                            column=location:town, timestamp=2024-07-30T08:10:19.297, value=Dallas
 Abbott Howard                                           column=location:town, timestamp=2024-07-30T08:10:19.297, value=Baton Rouge
 Abbott Jack                                             column=location:town, timestamp=2024-07-30T08:10:19.297, value=Juarez
 Adams Clyde                                             column=location:town, timestamp=2024-07-30T08:10:19.297, value=Lafayette
 Aguilar Myrtie                                          column=location:town, timestamp=2024-07-30T08:10:19.297, value=Uman
 ...
 Young Della                                             column=location:town, timestamp=2024-07-30T08:10:19.297, value=Chetumal
 Young Josephine                                         column=location:town, timestamp=2024-07-30T08:10:19.297, value=Redding
 Young Mattie                                            column=location:town, timestamp=2024-07-30T08:10:20, value=Carlsbad
 Zimmerman Gene                                          column=location:town, timestamp=2024-07-30T08:10:19.297, value=Tijuana
 Zimmerman Madge                                         column=location:town, timestamp=2024-07-30T08:10:19.297, value=Nogales
997 row(s)
Took 0.2112 seconds
ValueFilter

 
Возвращает все пары ключ/значение, значения которых удовлетворяют условию сравнения, заданного аргументами. Принимает два значения: оператор сравнения и компаратор.

Синтаксис:

"ValueFilter (=, 'binary:TX')"

Пример команды:

scan 'people', { FILTER => "ValueFilter (=, 'binary:TX')" }

Этот фильтр возвращает список техасцев из тестовой таблицы, то есть все пары ключ/значение, строго равные TX. Результат (первые и последние пять строк):

ROW                                                      COLUMN+CELL
 Abbott Delia                                            column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Alexander Derrick                                       column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Alvarado Melvin                                         column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Atkins Gene                                             column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Austin Travis                                           column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 ...
 Watkins Julian                                          column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Welch Lela                                              column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Willis Travis                                           column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Wilson Grace                                            column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
 Wilson Nellie                                           column=location:state, timestamp=2024-07-30T08:10:19.297, value=TX
112 row(s)
Took 0.0535 seconds
DependentColumnFilter

 
Ищет в каждой строке столбец, определенный двумя обязательными аргументами: семейство столбцов и квалификатор столбца. Если такой столбец найден (референтный столбец), то возвращает все пары ключ/значение из этой строки, имеющие такую же метку времени как и референтный столбец. Если не найден — не возвращает ничего.

Если задан необязательный третий аргумент (dropDependentColumn) логического типа, то референтный столбец либо возвращается (при значении false), либо нет (при значении true).

Можно задать еще два аргумента: оператор сравнения и компаратор. В этом случае значение столбца также должно пройти проверку сравнения, заданного этими аргументами, чтобы столбец считался референтным.

Принимает два, три или пять аргументов: семейство столбцов (обязательно), квалификатор столбца (обязательно), флаг dropDependentColumn (логический, необязательно), оператор сравнения и компаратор (последние два аргумента могут быть заданы только совместно).

Синтаксис:

"DependentColumnFilter ('location', 'town')"
"DependentColumnFilter ('location', 'town', true)"
"DependentColumnFilter ('location', 'town', true, =, 'binary:Carlsbad')"

Пример команды:

scan 'people', { FILTER => "DependentColumnFilter ('location', 'town', true, =, 'binary:Carlsbad')" }

Этот фильтр ищет в каждой строке точное значение Carlsbad в столбце с точным именем location:town и в случае успеха возвращает остальные пары ключ/значение, имеющие ту же метку времени, опуская саму найденную пару ключ/значение. Результат:

ROW                                              COLUMN+CELL
 Young Mattie                                    column=location:state, timestamp=2024-07-30T08:10:20, value=NM
1 row(s)
Took 0.0269 seconds

Этот пример опирается на поправки, внесенные в примере работы фильтра TimestampsFilter. Без них фильтр ничего не вернет, поскольку условие сравнения не будет выполнено.

SingleColumnValueFilter

 
Ищет в каждой строке референтный столбец, определяемый четырьмя обязательными аргументами: семейство столбцов, квалификатор столбца, оператор сравнения и компаратор. Если найден столбец с заданным семейством и квалификатором и его значение удовлетворяет условию сравнения — фильтр возвращает все пары ключ/значение из этой строки. Если найден столбец с заданным семейством и квалификатором, но его значение не удовлетворяет условию сравнения — никакие пары ключ/значение из этой строки не возвращаются. Если референтный столбец не найден — по умолчанию фильтр возвращает все пары ключ/значение из этой строки.

Можно дополнительно совместно задать два аргумента: если первый аргумент (setFilterIfMissing) имеет значение true (по умолчанию false), а референтный столбец не найден — фильтр не возвращает никакие пары ключ/значение из этой строки. Если второй аргумент (setLatestVersionOnly) имеет значение false (по умолчанию true) — проверяются все версии значения референтного столбца на соответствие условию сравнения, а не только последняя.

Принимает четыре или шесть аргументов: семейство столбцов (обязательно), квалификатор столбца (обязательно), оператор сравнения (обязательно), значение для сравнения (обязательно), флаги setFilterIfMissing и setLatestVersionOnly (необязательно, совместно).

Синтаксис:

"SingleColumnValueFilter ('location', 'town', =, 'binaryprefix:Al')"
"SingleColumnValueFilter ('location', 'town', =, 'binaryprefix:Al', true, false)"

Пример команды:

scan 'people', { FILTER => "SingleColumnValueFilter ('location', 'town', =, 'binaryprefix:Al', true, false)" }

Этот фильтр ищет в каждой строке значения, начинающиеся с Al, в столбце с точным именем location:town, проверяя все версии этих значений. Только в случае успеха он возвращает все пары ключ/значение из этой строки. Результат:

ROW                                              COLUMN+CELL
 Ball Nelle                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=43
 Ball Nelle                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Ball Nelle                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Ball Nelle                                      column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Bell Leila                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=58
 Bell Leila                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Bell Leila                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Bell Leila                                      column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Cohen John                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=28
 Cohen John                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Cohen John                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Cohen John                                      column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Diaz Anne                                       column=basic:age, timestamp=2024-07-30T08:10:19.297, value=57
 Diaz Anne                                       column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Diaz Anne                                       column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Diaz Anne                                       column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Howard Florence                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=37
 Howard Florence                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Howard Florence                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Howard Florence                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Ingram Barbara                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=55
 Ingram Barbara                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Ingram Barbara                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Ingram Barbara                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Jefferson Charlie                               column=basic:age, timestamp=2024-07-30T08:10:19.297, value=46
 Jefferson Charlie                               column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Jefferson Charlie                               column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Jefferson Charlie                               column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Kennedy Todd                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=44
 Kennedy Todd                                    column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Kennedy Todd                                    column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Kennedy Todd                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 McGee Isabelle                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=48
 McGee Isabelle                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 McGee Isabelle                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 McGee Isabelle                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Page Victoria                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=30
 Page Victoria                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Page Victoria                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Page Victoria                                   column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Phelps Lida                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=43
 Phelps Lida                                     column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Phelps Lida                                     column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Phelps Lida                                     column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Phillips Helen                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=61
 Phillips Helen                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Phillips Helen                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Phillips Helen                                  column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Reyes Marc                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=25
 Reyes Marc                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Reyes Marc                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Reyes Marc                                      column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Roberts Clayton                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=52
 Roberts Clayton                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Roberts Clayton                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Roberts Clayton                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Ryan Curtis                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=58
 Ryan Curtis                                     column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Ryan Curtis                                     column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Ryan Curtis                                     column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Spencer Lucinda                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Spencer Lucinda                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Spencer Lucinda                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Spencer Lucinda                                 column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Woods Bessie                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=47
 Woods Bessie                                    column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Woods Bessie                                    column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Woods Bessie                                    column=location:town, timestamp=2024-07-30T08:10:19.297, value=Albuquerque
 Yates Douglas                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=35
 Yates Douglas                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Yates Douglas                                   column=location:state, timestamp=2024-07-30T08:10:20, value=NM
 Yates Douglas                                   column=location:town, timestamp=2024-07-30T08:10:20, value=Albuquerque
18 row(s)
Took 0.0263 seconds
SingleColumnValueExcludeFilter

 
Работает так же, как и фильтр SingleColumnValueFilter, за исключением того, что значение референтного столбца никогда не возвращается.

Синтаксис:

"SingleColumnValueExcludeFilter ('location', 'town', =, 'binaryprefix:Al')"
"SingleColumnValueExcludeFilter ('location', 'town', =, 'binaryprefix:Al', true, false)"

Пример команды:

scan 'people', { FILTER => "SingleColumnValueExcludeFilter ('location', 'town', =, 'binaryprefix:Al', true, false)" }

Этот фильтр ищет в каждой строке значения, начинающиеся с Al, в столбце с точным именем location:town, проверяя все версии этих значений. Только в случае успеха он возвращает все пары ключ/значение из этой строки, кроме найденной. Результат:

ROW                                              COLUMN+CELL
 Ball Nelle                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=43
 Ball Nelle                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Ball Nelle                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Bell Leila                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=58
 Bell Leila                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Bell Leila                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Cohen John                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=28
 Cohen John                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Cohen John                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Diaz Anne                                       column=basic:age, timestamp=2024-07-30T08:10:19.297, value=57
 Diaz Anne                                       column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Diaz Anne                                       column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Howard Florence                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=37
 Howard Florence                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Howard Florence                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Ingram Barbara                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=55
 Ingram Barbara                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Ingram Barbara                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Jefferson Charlie                               column=basic:age, timestamp=2024-07-30T08:10:19.297, value=46
 Jefferson Charlie                               column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Jefferson Charlie                               column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Kennedy Todd                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=44
 Kennedy Todd                                    column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Kennedy Todd                                    column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 McGee Isabelle                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=48
 McGee Isabelle                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 McGee Isabelle                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Page Victoria                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=30
 Page Victoria                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Page Victoria                                   column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Phelps Lida                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=43
 Phelps Lida                                     column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Phelps Lida                                     column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Phillips Helen                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=61
 Phillips Helen                                  column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Phillips Helen                                  column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Reyes Marc                                      column=basic:age, timestamp=2024-07-30T08:10:19.297, value=25
 Reyes Marc                                      column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Reyes Marc                                      column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Roberts Clayton                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=52
 Roberts Clayton                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Roberts Clayton                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Ryan Curtis                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=58
 Ryan Curtis                                     column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Ryan Curtis                                     column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Spencer Lucinda                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Spencer Lucinda                                 column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Spencer Lucinda                                 column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Woods Bessie                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=47
 Woods Bessie                                    column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Woods Bessie                                    column=location:state, timestamp=2024-07-30T08:10:19.297, value=NM
 Yates Douglas                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=35
 Yates Douglas                                   column=location:country, timestamp=2024-07-30T08:10:19.297, value=USA
 Yates Douglas                                   column=location:state, timestamp=2024-07-30T08:10:20, value=NM
18 row(s)
Took 0.0646 seconds
ColumnRangeFilter

 
Возвращает только те пары ключ/значение, у которых имя квалификатора столбца находится в диапазоне, заданном аргументами. Края диапазона могут быть определенными или пустыми. После каждого края задается логический аргумент, определяющий, включать ли значение края в диапазон.

Принимает четыре аргумента: левый край диапазона, флаг левого включения, правый край диапазона, флаг правого включения. Если край диапазона пуст, то значение соответствующего ему флага включения не имеет значения.

Синтаксис:

"ColumnRangeFilter ('', true, 'c', false)"

Пример команды:

scan 'people', { FILTER => "ColumnRangeFilter ('', true, 'c', false)" }

Этот фильтр вернет только столбец basic:age, поскольку следующий по алфавиту квалификатор столбца — это country, и он не попадает в заданный диапазон. Результат (первые и последние пять строк):

ROW                                              COLUMN+CELL
 Abbott Delia                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=62
 Abbott Howard                                   column=basic:age, timestamp=2024-07-30T08:10:19.297, value=24
 Abbott Jack                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Adams Clyde                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Aguilar Myrtie                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=23
 ...
 Young Della                                     column=basic:age, timestamp=2024-07-30T08:10:19.297, value=21
 Young Josephine                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=29
 Young Mattie                                    column=basic:age, timestamp=2024-07-30T08:10:19.297, value=39
 Zimmerman Gene                                  column=basic:age, timestamp=2024-07-30T08:10:19.297, value=35
 Zimmerman Madge                                 column=basic:age, timestamp=2024-07-30T08:10:19.297, value=46
997 row(s)
Took 0.1788 seconds

Динамическая загрузка кастомных фильтров

HBase в составе ADH поддерживает динамическую загрузку кастомных фильтров. Для использования этой возможности следует задать директорию, содержащую JAR-файлы с кастомными фильтрами:

  1. Откройте веб-интерфейс ADCM и выберите ваш кластер ADH.

  2. Перейдите в раздел Services → HBase → Primary configuration и включите переключатель Show advanced.

  3. Откройте секцию настроек Custom hbase-site.xml и нажмите Add property.

  4. В поле имени параметра введите hbase.dynamic.jars.dir. В качестве значения параметра укажите путь на ваше усмотрение, например, ${hbase.rootdir}/lib. Нажмите Apply.

  5. Сохраните конфигурацию, нажав Save → Create, и перезапустите сервис, нажав Actions → Reconfig and graceful restart.

При наличии JAR-файлов с кастомными фильтрами по заданному пути вы сможете использовать их как в консоли HBase shell, так и в Java-приложениях с использованием API HBase.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней