2013-10-10 2 views
1

수백만 개의 행이있는 테이블이 있는데 특정 접두사가 포함 된 행을 선택할 수 있어야합니다. 스캔 할 수있는 접두사가 몇백 개가 될 수 있습니다. 이 접두사 각각은 최대 10 개의 행에 영향을 줄 수 있습니다. 내 경험에 의하면 범위 스캔은 필터보다 훨씬 더 효과적 이었으므로 각각에 대해 PrefixFilter를 추가하는 대신 여러 범위를 스캔하는 방법이 있기를 바랬습니다. hbase, 또는 적어도 PrefixFilters에 대한 더 나은 대안으로 이것을 할 수있는 방법이 있습니까?Hbase 다중 범위 스캔?

답변

2

MultiTableInputFormat을 (를) 찾고있는 것처럼 보입니다. 단일 테이블에서 여러 스캐너의 데이터를 공급할 수 있습니다.

사용 예 :

Scan scan1 = new Scan(); 
scan1.setStartRow(start1); 
scan1.setStopRow(end1); 
Scan scan2 = new Scan(); 
scan2.setStartRow(start2); 
scan2.setStopRow(end2); 
MultiTableInputCollection mtic = new MultiTableInputCollection(); 
mtic.Add(tableName1, scan1); 
mtic.Add(tableName2, scan2); 
TableMapReduceUtil.initTableMapperJob(mtic, TestTableMapper.class, Text.class, IntWritable.class, job1); 

이것은 API이며, 이는 관련 ticket입니다.

+0

결과를 반환하기 위해이 작업을 수행 할 수있는 방법이 있습니까? 이상적으로는 지정된 행 범위의 모든 결과를 갖는 ResultScanner를 생성하려고합니다. – user2623855