Ответ 1
Поля фильтра в XML файле сканера строками, отформатированными как JSON. Поскольку JSON для фильтра имеет много кавычек в нем, я рекомендую использовать отдельный файл для параметра curl -d, чтобы избежать одиночного цитата.
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 из API-интерфейсов HBase Java.
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 на столе, и она работала нормально.
В случае, если вам интересно, да, REST API для сканеров еще не так дружелюбен к разработчикам, как он может получить.