Filtro HBase REST (filtro SingleColumnValueFilter)


No puedo averiguar cómo usar filtros en la interfaz HBase REST (HBase 0.90.4-cdh3u3). La documentación solo me da una definición de esquema para una" cadena", pero no muestra cómo usarla.

Así que, soy capaz de hacer esto:

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

Y luego recuperar con

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

Pero ahora quiero usar un filtro SingleColumnValueFilter y tengo que codificarlo de alguna manera en el XML. ¿Alguien tiene un ejemplo para esto?

Gracias, Mario

Author: Tiago Peczenyj, 2012-02-16

1 answers

Los campos de filtro en el XML del escáner son cadenas formateadas como JSON. Dado que el JSON para el filtro tiene muchas comillas, recomiendo usar un archivo separado para el parámetro-d de curl, para evitar la comilla simple.

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

Donde está el archivo 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>

¿Cómo descubre cómo debería verse la cadena de filtro JSON? Aquí hay una manera fácil de pasar por el código Java que escupe el filtro stringified dado un objeto de filtro estándar de Java de HBase API.

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

Observe que el JSON y el XML requieren datos codificados en Base64. He probado el comando curl anterior en una mesa y funcionó bien.

En caso de que se lo pregunte, sí, la API REST para escáneres aún no es tan fácil de usar para desarrolladores como puede ser.

 11
Author: André Staltz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-10 13:12:47