Допустим, у меня есть три строки со следующими значениями:
+------+----------+
| row | f1:c1 |
+------+----------+
| row1 | \x00\x00 |
| row2 | \x01\x00 |
| row3 | \x03\x01 |
+------+----------+
Можно ли выбрать строки с \x00
в качестве второго байта значения (например, row1
и row2
)?
Дальнейшее объяснение
У меня есть неизменный объект, который состоит из пары UUID
s как части моей сущности.Поскольку UUID
имеет фиксированную длину, наиболее эффективным способом хранения является объединение всех частей в один байтовый массив и сохранение его в одном столбце.
Однако я должен иметь возможность выбирать строки на основе определенныхполе указанного объекта.Что в теории довольно просто: все, что мне нужно сделать, это взять значение моего столбца с определенным смещением и сравнить следующие 16 байтов со значением поиска.
На самом деле ByteArrayComparable
уже вроде как работает.Он принимает смещение, которое указывает на начало значения, и кажется, что все, что мне нужно, это добавить дополнительное смещение поверх этого.Но я не могу понять, как это сделать.
В общем, мне кажется, что это широко применимый вариант использования.Таким образом, должен быть способ сделать это, если я что-то упустил.
PS Я знаю, что, вероятно, смогу достичь того, чего хочу, с RegexStringComparator
, но это кажется дико неэффективным.
ОБНОВЛЕНИЕ
HBase поддерживает пользовательские фильтры, которые идеально подходят для моей ситуации.К сожалению, вся документация, которую я могу найти, кажется устаревшей, поскольку hbase.dynamic.jars.dir
и hbase.use.dynamic.jar
отсутствуют в моей конфигурации (моя версия 2.0.1).
ОБНОВЛЕНИЕ 2
Мне удалось решить эту проблему с помощью пользовательского фильтра.Похоже, что они удалили hbase.dynamic.jars.dir
и hbase.use.dynamic.jar
, но простое размещение фильтра на пути к классам работает нормально.
Если кто-то захочет написать ответ о том, как реализовать и использовать пользовательский фильтр, я с удовольствиемприсудить награду.