Filtre de repos HBase (SingleColumnValueFilter)

<!-Je ne sais pas comment utiliser les filtres de L'interface de repos HBase (HBase 0.90.4-cdh3u3). La documentation me donne juste un schéma définition d'une "chaîne", mais ne montre pas comment l'utiliser.

Donc, je suis capable de faire ceci:

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

et puis 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 fileur monobloc et je dois l'encoder d'une façon ou d'une autre dans le XML. Quelqu'un aurait-il un exemple?

Merci, Mario

38
demandé sur Tiago Peczenyj 2012-02-16 01:57:49

1 réponses

les champs de filtre dans le XML du Scanner sont des chaînes formatées en JSON. étant donné que le JSON pour le filtre contient de nombreuses guillemets, je recommande d'utiliser un fichier séparé pour le paramètre curl'S-d, pour éviter la seule Guillemette.

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

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 devrait ressembler la chaîne de filtres JSON? voici un moyen facile à travers le code Java qui crache le filtre stringified donné un standard Filtre l'objet 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 exigent des données encodées en Base64. J'ai testé la commande curl ci-dessus sur une table et ça a très bien marché.

dans le cas où vous vous demandez, Oui, L'API REST pour les scanners n'est pas encore aussi conviviale pour les développeurs qu'elle peut l'être.

11
répondu André Staltz 2012-07-10 13:12:47