2014-05-04 20 views
5

के साथ Hbase स्कैन करें, उदाहरण के लिए, पहले 100 परिणाम प्राप्त करने के लिए कोई तरीका है, फिर बाद में अगले 100 और अन्य प्राप्त करें ... जैसे SQL में हम को LIMIT और OFFSET के साथ करते हैं ? मेरी पंक्ति कुंजी uuidऑफ़सेट

उत्तर

3

आप इसे कई तरीकों से कर सकते हैं। सबसे आसान एक पेज फिल्टर है। नीचे HBase: The Definitive Guide, पेज 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); 

या आप सीमा आप चाहते हैं के लिए स्कैन पर पकड़ने सेट और फिर हर के लिए पिछला स्कैन से अंतिम पंक्ति + 1 के लिए शुरू पंक्ति को बदल सकते हैं से कोड उदाहरण है प्राप्त।

+0

मैंने इसे निश्चित रूप से हब्स में देखा। इसमें एक बड़ा सिर है। – Mark

+1

मुझे यहां बड़े ओवरहेड के बारे में निश्चित नहीं है। यह एक कैश के साथ स्कैन के समान है। आपको प्रारंभ पंक्ति (आसान) मिलती है और सीमा तक पहुंचने तक इसे पढ़ना शुरू कर देते हैं। निश्चित गाइड में एकमात्र मामूली समस्या का उल्लेख किया गया है "फ़िल्टर समानांतर में विभिन्न क्षेत्र सर्वरों पर चलते हैं और उन सीमाओं में अपने वर्तमान राज्य को बनाए रखने या संवाद नहीं कर सकते हैं। इस प्रकार, प्रत्येक फ़िल्टर को कम से कम पृष्ठ तक स्कैन करने की आवश्यकता होती है ताकि स्कैन समाप्त होने से पहले पंक्तियां हों। इसका मतलब है पृष्ठफिल्टर के लिए थोड़ी सी अक्षमता दी जाती है क्योंकि क्लाइंट को आवश्यकतानुसार अधिक पंक्तियां दी जाती हैं। " –

+0

हाय अरुण, क्या उपयोगकर्ता को 'ith' पृष्ठ चुनने का कोई तरीका है? आपके दृष्टिकोण के साथ, मैं उपयोगकर्ता को एक समय में पूरे परिणाम सेट, 1 "पृष्ठ" पर फिर से शुरू करने की अनुमति दे सकता हूं, लेकिन मैं उपयोगकर्ता को किसी भी दिए गए पृष्ठ नंबर को चुनने में सक्षम नहीं हूं जिसे वह जाना चाहता है। –

संबंधित मुद्दे