Фильтр HBase REST (SingleColumnValueFilter) - PullRequest
38 голосов
/ 16 февраля 2012

Я не могу понять, как использовать фильтры в интерфейсе HBase REST (HBase 0.90.4-cdh3u3).Документация просто дает мне определение схемы для «строки», но не показывает, как ее использовать.

Итак, я могу сделать это:

curl -v -H 'Content-Type: text/xml' -d '<Scanner startRow="ddo" stopRow="ddp" batch="1024"/>' 'http://hbasegw:8080/table/scanner'

изатем получить с помощью

curl -s -H "Content-Type: text/xml" http://hbasegw:8080/table/scanner/13293426893883128482b | tidy -i -q -xml

Но теперь я хочу использовать SingleColumnValueFilter и должен как-то кодировать его в XML.У кого-нибудь есть пример для этого?

Спасибо, Марио

1 Ответ

11 голосов
/ 10 июля 2012

Поля фильтра в XML-файле сканера представляют собой строки, отформатированные в формате JSON. Поскольку в JSON для фильтра содержится много кавычек, я рекомендую использовать отдельный файл для параметра -d curl, чтобы избежать одинарных кавычек .

curl -v -H "Content-Type:text/xml" -d @args.txt http://hbasegw:8080/table/scanner

Где файл args.txt:

<Scanner startRow="cm93MDE=" endRow="cm93MDg=" batch="1024">
    <filter>
    {
        "latestVersion":true, "ifMissing":true, 
        "qualifier":"Y29sMQ==", "family":"ZmFtaWx5", 
        "op":"EQUAL", "type":"SingleColumnValueFilter", 
        "comparator":{"value":"MQ==","type":"BinaryComparator"}
    }
    </filter>
</Scanner>

Как вы узнаете, как должна выглядеть строка фильтра JSON? Вот простой способ с помощью кода Java, который выделяет строковый фильтр, заданный стандартным объектом Filter из Java API HBase.

SingleColumnValueFilter filter = new SingleColumnValueFilter(
    Bytes.toBytes("family"),
    Bytes.toBytes("col1"),
    CompareFilter.CompareOp.EQUAL,
    Bytes.toBytes("1")
);
System.out.println(ScannerModel.stringifyFilter(filter));

Обратите внимание, что JSON и XML требуют данных, закодированных в Base64. Я протестировал приведенную выше команду curl на столе, и она работала просто отлично.

Если вам интересно, да, API-интерфейс REST для сканеров еще не настолько удобен для разработчиков, насколько это возможно.

...