2014-05-04 34 views
5

Bir HBase tablosunu taramanın bir yolu var mı, örneğin ilk 100 sonuçları, daha sonra bir sonraki 100'ü al ve bu şekilde devam et ... SQL'de olduğu gibi LIMIT ve OFFSET ile ? Satır düğmelerim uuidHbase ofset ile ofset

cevap

3

Bunu çeşitli yollarla yapabilirsiniz. En kolay olan bir sayfa filtresidir. Aşağıda HBase: The Definitive Guide, sayfa 150.

 

private static final byte[] POSTFIX = new byte[] { 0x00 }; 
Filter filter = new PageFilter(15); 
int totalRows = 0; byte[] lastRow = null; 
while (true) { 
    Scan scan = new Scan(); 
    scan.setFilter(filter); 
    if (lastRow != null) { 
    byte[] startRow = Bytes.add(lastRow, POSTFIX); 
    System.out.println("start row: " + Bytes.toStringBinary(startRow)); 
    scan.setStartRow(startRow); 
    }
 
    ResultScanner scanner = table.getScanner(scan); 
    int localRows = 0; 
    
 Result result; 
    
 while ((result = scanner.next()) != null) { 
    System.out.println(localRows++ + ": " + result); 
    totalRows++;
 
    lastRow = result.getRow(); 
    }
 
    scanner.close();
 
    if (localRows == 0) break; 
} 


System.out.println("total rows: " + totalRows); 

Ya da istediğiniz sınırı için tarama üzerinde alıcı ayarlayın ve sonra her için önceki taramadan son satıra + 1'e başlangıç ​​satır değiştirebilir kod örneği almak.

+0

Bunu hbase'de kesin olarak gördüm. – Mark

+1

Burada büyük yük hakkında emin değilim. Bu bir önbellekle tarama ile aynıdır. Başlangıç ​​satırını (kolay) bulursunuz ve limit ulaşılana kadar okumaya başlayın. tek küçük sorun, kesin kılavuzda "Filtreler farklı bölge sunucularında paralel olarak çalışıyorlar ve bu sınırlar boyunca mevcut durumlarını tutamazlar veya iletemezler. Bu nedenle, her filtrenin, taramayı bitirmeden önce en az pageCount satırını taraması gerekir. Bu, PageFilter için istemciye gerektiğinden daha fazla satır bildirildiği için küçük bir verimsizlik anlamına gelir. " –

+0

Merhaba Arun, bir kullanıcının 'ith' sayfasını seçmesine izin vermenin bir yolu var mı? Yaklaşımınızla, kullanıcının bir kerede tüm sonuç kümesi, 1 "sayfa" üzerinde yineleme yapmasına izin verebilirim, ancak kullanıcının gitmek istediği herhangi bir sayfa numarasını seçmesine izin veremiyorum. –