2014-05-04 22 views
5

Có cách nào quét bảng HBase, ví dụ, kết quả đầu tiên 100 , sau đó nhận được 100 kết quả tiếp theo ... Tương tự như trong SQL, chúng tôi thực hiện với LIMIT và OFFSET ? Các khóa hàng của tôi là uuidQuét HBase với độ lệch

Trả lời

3

Bạn có thể thực hiện theo nhiều cách. Cách dễ nhất là bộ lọc trang. Dưới đây là đoạn mã ví dụ từ HBase: The Definitive Guide, trang 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); 

Hoặc bạn có thể đặt bắt trên quét cho giới hạn bạn muốn và sau đó thay đổi hàng đầu đến hàng cuối cùng + 1 từ trước quét cho mỗi được.

+0

Tôi nhìn thấy nó trong căn cứ dứt khoát. Nó có một đầu lớn hơn. – Mark

+1

Tôi không chắc chắn về chi phí lớn ở đây. Điều này giống với việc quét bằng bộ nhớ cache. Bạn tìm thấy hàng bắt đầu (dễ) và bắt đầu đọc nó cho đến khi đạt đến giới hạn. vấn đề nhỏ duy nhất được đề cập trong hướng dẫn dứt khoát là "Bộ lọc chạy trên các máy chủ vùng khác nhau song song và không thể giữ lại hoặc truyền đạt trạng thái hiện tại của chúng trên các ranh giới đó. Điều này có nghĩa là một sự kém hiệu quả nhỏ được đưa ra cho PageFilter vì nhiều hàng được báo cáo cho khách hàng hơn là cần thiết. " –

+0

Hi Arun, có cách nào để người dùng chọn trang 'ith' không? Với cách tiếp cận của bạn, tôi có thể cho phép người dùng lặp lại toàn bộ tập kết quả, 1 "trang" cùng một lúc, nhưng tôi không thể cho phép người dùng chọn bất kỳ số trang nhất định nào mà anh ta muốn truy cập. –

Các vấn đề liên quan