Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы_часть2.doc
Скачиваний:
8
Добавлен:
22.04.2019
Размер:
12 Мб
Скачать
☆

2.15 Использование фильтров при извлечении данных в субд Hbase

Фильтры позволяют получать данные, получаемые операцией сканирования. Фильтровать можно по значению RowKey строки, по ColumnFamily, Column, по значению ячейки.

При выполнении фильтрации используются следующие операции сравнения.

LESS, LESS_OR_EQUAL, EQUAL, NOT_EQUAL, GREATER_OR_EQUAL, GREATER, NO_OP(исключить все).

WritableByteArrayComparable – интерфейс

BinaryComparator

BinnaryPrefixComparator

RegexStringComparator

RowFilter

FamilyFilter

QualifierFilter

ValueFilter (перебор по хранимым значениям)

Осуществляет поиск во всех столбцах таблиц. Для поиска по значению в конкретном столбце используется фильтр SystemColumnValueFilter

SingleColumnFamilyExcludeFilter

Фильтр исключает из выборки строки, в которых значение указанного столбца соответствует указанному фильтру.

PrefixFilter

Возвращает все строки, ключи которых соответствуют указанному префиксу

PrefixFilter(byte[] prefix)

PageFilter

Позволяет возвращать данные страницами

KeyOnlyFilter

Значения не передаются. Только ключи

FirstKeyOnlyFilter

Возвращает только первую колонку

InclusiveStopFilter

Если необходимо включить и начальное значение и конечное значение интервала, то необходимо использовать StartRow для начального значения и InclusiveStopFilter для конечного значения

ColumnPaginationFilter

Возвращает результат порциями. В качестве порций – столбцы

ColumnPaginationFilter(int limit, int offset)

ColumnPrefixFilter(byte[] prefix)

RandomRowFilter(float chanse)

Фильтры декораторы:

whileMatchFilter – может расширять функциональность других фильтров и использоваться чтобы вернуть порцию данных, соответствующих фильтру до 1го значения, которое не соответствует.

FilterList – используется для того, чтобы одновременно установить несколько фильтров (добавление фильтра - addFilter).

Реализовать фильтр можно с помощью интерфейса:

Filter

FilterBase

Public interface Filter extends Writable{

Public enum ReturnCode{

INCLUDE, SKIP, NEXT_COL, NEXT_ROW, SEEK_NEXT_USING_HINT

}

Public void reset()

Public Boolean filterRowKey(byte[] buffer, int offset, int length);

Public Boolean filterAllRemining();

Public ReturnCode filter KeyValue(KeyValue v);

Public void filterRow(List<KeyValue vvs>);

Public Boolean hasFilterRow();

Public Boolean FilterRow();

Public KeyValue getNextKeyHint(keyValue curr);

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

Результаты: INCLUDE – данное значение должно попасть в результирующий набор данных

SKIP – значение надо пропустить

NEXT_COL – необходимо пропустить остаток текущей колонки

NEXT_ROW – необходимо пропустить остаток строки

SEEK_NEXT_USING_HINT – необходимо пропустить несколько значений и перейти к следующему с помощью метода getNextKeyHint;

FilterRow – импользуется для передачи целой записи клиенту

FilterKeyValue - для каждой пары KeyValue текущей строки чтобы определить вхождение этой пары в результирующий набор данных

Reset - выполняется после чтения строки для. Применяется для каждой строки

FilterRowKey - Позволяет остановить сканирование если он возвращает тру, то сканирование останавливается, иначе продолжается.