Фильтр с использованием HBase REST API


Кто-нибудь знает что-нибудь о REST API HBase? В настоящее время я пишу программу, которая вставляет и считывает данные из HBase с помощью команд curl. При попытке чтения я использую команду curl get, например

curl -X GET 'http://server:9090/test/Row-1/Action:ActionType/' -h 'Accept:application/json'

Возвращает столбец Action: ActionType из строки-1. Если я хочу сделать эквивалент предложения WHERE с помощью команды GET, я застрял, однако. Я не уверен, что это вообще возможно? Если я хочу найти все записи, где Action: ActionType =1, например. Помощь ценится!

1 5

1 ответ:

Вы можете сделать это с помощью фильтра (здесь a SingleColumnValueFilter) в вашем запросе CURL.

Сначала создайте XML-файл (myscanner.xml), описывающий сканирование. Здесь мы хотим фильтровать по значению квалификатора с помощью оператора EQUAL):

<Scanner batch="10">
    <filter>
        {
            "type": "SingleColumnValueFilter",
            "op": "EQUAL",
            "family": "<FAMILY_BASE64>",
            "qualifier": "<QUALIFIER_BASE64>",
            "latestVersion": true,
            "comparator": {
                "type": "BinaryComparator",
                "value": "<SEARCHED_VALUE_BASE64>"
            }
        }
    </filter>
</Scanner>

Вы должны заменить <FAMILY_BASE64>, <QUALIFIER_BASE64> и <SEARCHED_VALUE_BASE64> с вашими собственными значениями (значения должны быть преобразованы в base64, вы можете сделать echo -en ${FAMILY} | base64.

Затем отправьте запрос CURL в HBase REST API с этим XML-файлом в виде данных:

curl -vi -X PUT \
    -H "Content-Type:text/xml" \
    -d @myscanner.xml \
    "http://${HOST}:${REST_API_PORT}/${TABLE_NAME}/scanner/"

Этот запрос должен вернуться объект сканера, например:

[...]
Location: http://${HOST}:${REST_API_PORT}/${TABLE_NAME}/scanner/149123344543470bea57a

Затем используйте данный сканер для перебора результатов (запрос многократного перебора):

curl -vi -X GET \
    -H "Accept: text/xml" \
    "http://${HOST}:${REST_API_PORT}/${TABLE_NAME}/scanner/149123344543470bea57a"

Вы также можете принять "application/json" вместо XML. Обратите внимание, что результаты кодируются base64.

Источники:

HBase REST Filter (SingleColumnValueFilter)

Список фильтров, которые вы можете использовать: https://gist.github.com/stelcheck/3979381

Документация Cloudera о HBase REST API : https://www.cloudera.com/documentation/enterprise/5-9-x/topics/admin_hbase_rest_api.html