では動作しない私のHBaseのスキーマは、次のように次のようになります。複数のフィルタは、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>",
},
}
}
を私の状況では、私は特定の修飾子を問い合わせる必要があるので、私は、次のフィルタを構築:
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);
をご覧のとおり、列ファミリフィルタを修飾子フィルタにバインドしました。これは、ファミリフィルタと修飾子フィルタの両方がtrueに評価された場合にのみ行が返されることを意味します。
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;
}
私は、コードを試した後、私はTable#getScanner(Scan)
に基づいて私のfindメソッドが正しく動作しない可能性がありました。通常
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));
、私はそれがうまくこれら2つのフィルタのいずれかをコメントアウトする場合:
多くはである何、私はこれらの2つのフィルタが一緒に働くことができませんでした。もちろん、完璧な仕事ではないので、私はそれが戻ってlimit
行を返す必要があるため、それはありません。
任意のアイデアをいただければ幸いです。どうもありがとう!