38 votes

Filtre REST HBase ( SingleColumnValueFilter )

Je n'arrive pas à comprendre comment utiliser les filtres dans l'interface REST de HBase (HBase 0.90.4-cdh3u3). La documentation me donne juste une définition de schéma pour une "chaîne", mais ne montre pas comment l'utiliser.

Donc, je suis capable de faire ça :

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

et ensuite récupérer avec

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

Mais maintenant, je veux utiliser un SingleColumnValueFilter et je dois coder cela d'une manière ou d'une autre dans le XML. Quelqu'un a-t-il un exemple pour cela ?

Merci, Mario

11voto

André Staltz Points 1023

Les champs de filtre dans le XML du scanner sont des chaînes de caractères formatées en JSON. Comme le JSON du filtre comporte de nombreux guillemets, je recommande d'utiliser un fichier distinct pour le paramètre -d de curl, afin d'éviter les guillemets simples.

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

Où le fichier args.txt est :

<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>

Comment découvrir à quoi doit ressembler la chaîne de filtre JSON ? Voici un moyen facile à travers le code Java qui sort le filtre stringifié à partir d'un objet Filter standard de l'API Java de HBase.

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

Notez que le JSON et le XML nécessitent des données codées en Base64. J'ai testé la commande curl ci-dessus sur un tableau et cela a bien fonctionné.

Au cas où vous vous poseriez la question, oui, l'API REST pour les scanners n'est pas encore aussi conviviale pour les développeurs qu'elle pourrait l'être.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X