내 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);
을 보시다시피 열 패밀리 필터를 한정자 필터로 바인딩했습니다. 즉, 패밀리 필터와 한정자 필터가 모두 참인 경우에만 행이 반환됩니다. 내가 코드를 시도한 후
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)
이 제대로 작동하지 않을 수 있습니다 내 찾기 방법을 기반으로 발견했다.
무엇보다, 나는이 두 개의 필터가 함께 작동하지 않을 수 있습니다 발견 : 나는 일이 두 가지 필터 중 하나를 주석
일반적으로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));
. 물론, 완벽하게 작동하지 않습니다. 왜냐하면 내가 limit
행을 반환해야하기 때문입니다. 그러나 그렇지 않습니다.
어떤 아이디어라도 감사 할 것입니다. 고마워요!