Filtre de repos HBase (SingleColumnValueFilter)
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
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.