2012-08-23 2 views
3

특정 기준을 만족하는 모든 행을 검색하려면 HBase에서 스캔을 사용해야합니다. 그 이유는 필자가 필터를 사용하는 이유입니다. 두 개의 SingleColumnValueFilter). 지금, 나는 내 rowKeys이 방식으로 구성했다 :시작 행, 끝 행 및 필터가있는 HBase에서 스캔 사용하기

a.b.x|1|1252525 
a.b.x|1|2373273 
a.b.x|1|2999238 
... 
a.b.x|2|3000320 
a.b.x|2|4000023 
... 
a.b.y|1|1202002 
a.b.y|1|1778949 
a.b.y|1|2738273 

및 추가 요구 사항으로, 나는 "ABX | 1"로 시작하는 rowKey을 가진 행만을 반복 할 필요가

이제, 질문

  1. 내 필터 목록에 추가 PrefixFilter를 사용하면 스캐너가 항상 모든 행을 검색하지만 필터가 적용됩니다.
  2. startRow (접두어)와 filterlist (PrefixFilter없이)를 전달하는 검색을 인스턴스화하면 주어진 행 접두사에서부터 검색이 시작된다는 것을 이해했습니다. 그래서, "a.b.x." startRow로 스캔하면 a.b.y도 스캔됩니까?
  3. 새 스캔 (startRow, endRow)을 사용하고 setFilter를 사용하면 어떤 행동이 발생합니까? 즉, 누락 된 생성자 Scan (byte [] start, byte [] end, Filter filter)은 무엇입니까? 사전에

덕분에
안드레아

답변

2

행 키는 HBase를의 (어휘) 분류되어 있습니다. 따라서 모든 "abx | 1"은 "abx | 2"앞에옵니다. 행 키는 바이트 배열로 저장되고 사전 식으로 정렬되므로 비 고정 길이 행 키와 혼합 할 때주의하십시오 다른 문자 클래스. 그러나이 라인에서 귀하의 요구 사항 뭔가 일을해야에 대한 : 당신의 응답을

Scan scan = new Scan(Bytes.ToBytes("a.b.x|1"),Bytes.toBytes("a.b.x|2"); //creating a scan object with start and stop row keys 

scan.setFilter(colFilter);//set the Column filters you have to this scan object. 

//And then you can get a scanner object and iterate through your results 
ResultScanner scanner = table.getScanner(scan); 
for (Result result = scanner.next(); result != null; result = scanner.next()) 
{ 
    //Use the result object 
} 
+0

감사합니다,하지만 난 내 질문에 대답하지 않는 것을 생각한다. 제 말은, 사전 순 서적과 스캔 문제에 대해 알고 있고, 제 코드가 작동하고 있습니다. 내 질문은 내부적으로 스캔이 어떻게 실행되는지에 관한 질문이었습니다 (세 가지 질문 참조). 어쨌든 고맙습니다. – Andrea