Я был смущен тем, как фильтры работают в HBase (или, в основном, эквивалентно, в HappyBase), которые я использую для взаимодействия с HBase). Источником моей путаницы является то, что я не могу понять, что делают фильтры.Фильтры в HBase: Предназначены для фильтрации данных по ряду или по столбцу или для обоих?
Некоторые фильтры, такие как SingleColumnValueFilter
, приводят к тому, что строки не должны испускаться в зависимости от значения одного из их столбцов. Это имеет смысл - на мой взгляд, для этого нужны фильтры. Однако другие фильтры, такие как FirstKeyOnlyFilter
, как представляется, не фильтруются в строковом смысле, а скорее фильтруют данные, которые всплывают на запросчик - то есть они фильтруют по столбцу, как и аргумент columns
. Не только это, но они, по-видимому, влияют на то, получают ли другие фильтры доступ к данным.
Возможно, я просто использую их неправильно. Но для меня «фильтр» должен удалять элементы, основанные на выходе, который работает с их свойствами, например «Найди мне всех людей высотой более 7 футов!». Но поведение FirstKeyOnlyFilter
, по крайней мере, в HBase, похоже, более сродни: «Принесите мне все левое ухо и ничего больше!» Кроме того, если у меня есть фильтр:
SingleColumnValueFilter('body', 'height', =, 'regexstring:^over7ft$') AND FirstKeyOnlyFilter
, FirstKeyOnlyFilter
, похоже, ограничивает доступ первого фильтра к семейству столбцов: столбец «тело: высота».
Что имеется с этим выбором дизайна? Фильтр выше выглядит так, как будто он говорит: «Яркой меня называют всех ровно в 7 футов!» но вместо этого он говорит что-то более похожее на «Яркое меня, если имя имеет высоту 7 футов!». Первый ключ строки не имеет столбцов, а имена могут иметь высоту.
Что я делаю неправильно? Является ли это особенностью HappyBase или это то же самое в HBase?
Интересно. Но что делать, если я хотел бы уменьшить сетевой ввод-вывод, но не обязательно читать из базы данных? Т.е., «верните мне все ключи строк, где строка имеет cf: c значение x» – eriophora
, я обновил ответ –
@eriophora ответ на ваш комментарий выше: используйте фильтр столбцов и FirstKeyOnlyFilter и передайте параметр «должен соответствовать всем» к объекту сканирования. – halil