Фильтрация в HBase - PullRequest
       13

Фильтрация в HBase

1 голос
/ 29 декабря 2011

Версия: HBase Cloudera CDH3U2.

Я вставил длинное значение типа данных в HBase, используя Java API.

    Get get = new Get(Bytes.toBytes("111"));

    FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);

 singleColumnValueFilter = new SingleColumnValueFilter(columnFamily,columnName , CompareOp.GREATER_OR_EQUAL, Bytes.toBytes(2));

    filterList.addFilter(singleColumnValueFilter);

    get.setFilter(filterList);
    get.setMaxVersions(10);

    Result result = hTable.get(get);

    List keyValueList = result.getColumn(columnFamily, columnName);

Здесь я получаю, что keyValueList.size () равен нулю, и если я не применяюлюбые фильтры, я получаю keyValueList.size () равен 3, а значения (1,5,7).

Я хочу получить результат 5 и 7.

Помогите мнесделай это.

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 03 апреля 2012

Вы сказали, что пытаетесь хранить длинные значения?Тогда ты не должен был поставить Bytes.toBytes(2L)?

0 голосов
/ 27 февраля 2016
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);

Оператор Must_Pass_All - это отложенная операция, т. Е. Если он не найдет никакого значения для фильтра в списке фильтров, он остановит выполнение.

Попробуйте:

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);

Кроме того, у вас есть только один набор фильтров, поэтому не рекомендуется использовать какой-либо список фильтров.Используйте его только тогда, когда вы хотите, чтобы к таблице было применено более одного фильтра.

0 голосов
/ 29 декабря 2011

Как вы храните значения?Вы храните их с помощью Bytes.toBytes ("2") или Bytes.toBytes (2)?Вы должны использовать то же самое здесь.Компаратором по умолчанию является BinaryComparator , который сравнивает преобразованное в байтах значение лексикографически, но метод преобразования различен для строк и целых чисел.Так что либо вы используете целые числа при вставке, а также при сравнении, либо вы используете строки в обоих случаях.

Попробуйте вместо этого использовать Bytes.toBytes ("2").

...