2014-05-01 3 views
1

HBase Stargate를 사용하여 테이블을 스캔 할 때 중대한 문제가 있습니다. 내 HBase 행 스키마는 기본적으로 objectidnumber_languagecode_date_randomhash입니다.HBase 스타 게이트 스캐너 - startRow 및 endRow가 작동하지 않습니다.

1_en_2014-12-12_1432ae341 
1_en_2014-13-13_234fe321 
2_en_2014-01-14_243a43fe 
... 
342342_uk_2014-01-14_2234af3 

objectid로 시작하는 모든 항목에 대해 표를 스캔하고 싶습니다. 문제는 objectidnumbers가 연속적이며 숫자가 다르다는 것입니다.하지만 완전히 확신 할 수는 없습니다. HBase를 쉘을 사용하는 경우

는, 내가 사용 명령이

입니다 : 결과는 표시로

scan 'object_articles', { STARTROW => '33_', ENDROW => '34' } 

이것은 나에게 33_로 시작하는 모든 행을 포기하고 34 안타 즉시 중지해야합니다

나는이 간단한 XML 내 스타 게이트 스캐너를 설정할 때
hbase(main):012:0> scan 'object_articles', { STARTROW => '33_', ENDROW => '34' } 
ROW           COLUMN+CELL 
33_en_2004_zdfasdf       column=cf:articleId, timestamp=1398803544834, value=en_2004_zdfasdf 
33_en_2004_zdfasdf       column=cf:articleTitle, timestamp=1398803544834, value=Testing 
33_en_2004_zdfasdf       column=cf:index, timestamp=1398803544834, value=en_2004 
1 row(s) in 0.0120 seconds 

그러나 :

<Scanner startRow="33_" endRow="34" /> 

그것은이다 전체 테이블에서 모든 행을 돌려주었습니다. 또 다른 동작은 4 자리 startRow/endRow가 204 내용 없음 응답을 생성하지만 3 자리 startRow/endRow가 전체 테이블을 반환한다는 것입니다.

모든 결과 :

<Scanner startRow="999_" endRow="1000" /> 

204 없음 내용 :

내가 그것을 쉘이 잘 작동 보인다 이유에 꽤 당황 해요,하지만 스타 게이트의 XML이 아닙니다.

답변

0

나는 그것이 2AM에 게시하고 있었다고 가정한다. 그러나 이것은 정말로 간단했다. 나는 사전 적 순서로 내 머리 글자를 감싸고 있지 않았다.

99_ < 9_ 이래로, 내 독창적 아이디어는 효과가 없을 것입니다. 자바에서

:

xml.append("<Scanner startRow=\"").append(startRow).append("\">"); 

    // Prefix Filter 
    PrefixFilter test = new PrefixFilter(Bytes.toBytes(startRow)); 
    xml.append("<filter>").append(ScannerModel.stringifyFilter(test)).append("</filter>"); 

    xml.append("</Scanner>"); 

그것으로 "99_"로 보이는 방법은, 그것은 단지 OOID로 시작하는 행을 잡아입니다 그 방법을 startRow에 대한 PrefixFilter을 추가하고 endRow에 치우는 결국 시작 롤 :

<Scanner startRow="99_"> 
    <filter> 
     {"type":"PrefixFilter","value":"OTlf"} 
    </filter> 
</Scanner> 
+0

감사합니다. 도움이됩니다. –