Mon schéma HBase ressemble comme suit:Plusieurs filtres fonctionnent pas dans HBase 1.2.6
{
"<trace-id>": {
"span-timestamp": {
"ts:span:<timestamp>": ""
},
"span-name": {
"ts:span:<name>": ""
},
"span-duration": {
"ts:span:<duration>": ""
},
"span-blob": {
"ts:span:<span-id>": "<span>"
},
"endpoint": {
"ts:endpoint:<service-name>": ""
},
"annotation": {
"ts:annotation:<value>": ""
},
"binary-annotation": {
"ts:binary-annotation:<key>": "<value>",
},
}
}
Dans mon cas, je dois interroger des qualificatifs spécifiques, donc je construit des filtres suivants:
final FilterList filters = new FilterList(Operator.MUST_PASS_ALL);
final Charset cs = HOperation.CHARSET;
filters.addFilter(Filters.qualifier(Schema.SCHEMA_TRACES_ENDPOINT, CompareOp.EQUAL, request.serviceName));
filters.addFilter(Filters.qualifier(Schema.SCHEMA_TRACES_SPAN_NAME, CompareOp.EQUAL, request.spanName));
filters.addFilter(Filters.qualifier(Schema.SCHEMA_TRACES_SPAN_TIMESTAMP,
request.endTs * 1000 - request.lookback * 1000, request.endTs * 1000));
filters.addFilter(new PageFilter(request.limit));
scan.setFilter(filters);
scan.setLoadColumnFamiliesOnDemand(true);
Comme vous pouvez le voir, j'ai lié le filtre de famille de colonnes avec un filtre de qualificatif, ce qui signifie que la ligne ne sera retournée que si le filtre de famille et le filtre de qualificateur sont tous les deux évalués à vrai.
static FilterList qualifier(final Schema schema, final CompareOp op, final byte[] value) {
final FilterList list = new FilterList(Operator.MUST_PASS_ALL);
list.addFilter(new FamilyFilter(CompareOp.EQUAL, new BinaryComparator(schema.cf().getBytes(HOperation.CHARSET))));
list.addFilter(new QualifierFilter(op, new BinaryComparator(value)));
return list;
}
Après que j'ai essayé le code, j'ai trouvé ma méthode de recherche basée sur Table#getScanner(Scan)
pourrait ne pas fonctionner correctement.
De plus, j'ai trouvé ces deux filtres ne pouvaient pas travailler ensemble:
filters.addFilter(Filters.qualifier(Schema.SCHEMA_TRACES_ENDPOINT, CompareOp.EQUAL, request.serviceName));
filters.addFilter(Filters.qualifier(Schema.SCHEMA_TRACES_SPAN_NAME, CompareOp.EQUAL, request.spanName));
En général, quand je commente sur l'un de ces deux filtres fonctionner. Bien sûr, ne fonctionne pas parfaitement, car j'en ai besoin pour retourner limit
lignes, cependant, ce n'est pas le cas.
Toutes les idées seraient appréciées. Merci beaucoup!