2010-03-12 15 views
5

हाय वहाँ मैं एसक्यूएल के लिए उपयोग कर रहा हूँ, लेकिन मुझे एक HBase तालिका से डेटा पढ़ने की जरूरत है। इस पर किसी भी तरह मदद बहुत अच्छा होगा। तालिका से पढ़ने के लिए एक किताब या शायद कुछ नमूना कोड। किसी ने कहा कि एक स्कैनर का उपयोग करके चाल चलती है, लेकिन मुझे नहीं पता कि इसका उपयोग कैसे किया जाए।हबेस से डेटा कैसे पढ़ा जाए?

उत्तर

9

the website से:

// Sometimes, you won't know the row you're looking for. In this case, you 
// use a Scanner. This will give you cursor-like interface to the contents 
// of the table. To set up a Scanner, do like you did above making a Put 
// and a Get, create a Scan. Adorn it with column names, etc. 
Scan s = new Scan(); 
s.addColumn(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier")); 
ResultScanner scanner = table.getScanner(s); 
try { 
    // Scanners return Result instances. 
    // Now, for the actual iteration. One way is to use a while loop like so: 
    for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { 
    // print out the row we found and the columns we were looking for 
    System.out.println("Found row: " + rr); 
    } 

    // The other approach is to use a foreach loop. Scanners are iterable! 
    // for (Result rr : scanner) { 
    // System.out.println("Found row: " + rr); 
    // } 
} finally { 
    // Make sure you close your scanners when you are done! 
    // Thats why we have it inside a try/finally clause 
    scanner.close(); 
} 
+0

नमूना कोड के लिए धन्यवाद करना चाहते हैं। – WackoMax

+0

यह धीमा हो सकता है क्योंकि यह प्रत्येक 'scanner.next() 'के लिए एक पंक्ति देता है, आप सबसे पहले वर्णित [s ]setCashing (numberOfRows)' के साथ कैशिंग सक्षम कर सकते हैं [http: //elsoufy.blogspot। fr/2014/06/gettint शुरू-साथ-hbase.html)। – bachr

2

मुझे लगता है कि इस्तेमाल किया लेकिन स्ट्रिंग मान आप परिणाम से विधि getValue का उपयोग करना चाहिए पाने के लिए।

byte[] bytes = rr.getValue(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier")); 
System.out.println(new String(bytes)); 
3

मैं पदावनत तरीकों के बिना समाधान की पेशकश करने

Configuration conf = HBaseConfiguration.create(); 
    Connection connection = ConnectionFactory.createConnection(conf); 
    Admin admin = connection.getAdmin(); 

    // list the tables 
    Arrays.stream(admin.listTables()).forEach(System.out::println); 

    // let's insert some data in 'mytable' and get the row 
    TableName tableName = TableName.valueOf("test_1"); 
    Table table = connection.getTable(tableName); 

    //Put 
    Put thePut = new Put(Bytes.toBytes("rowkey1")); 
    String columnFamily = "m"; 
    String columnQualifier1 = "col1"; 
    String outValue1 = "value1"; 
    String columnQualifier2 = "col2"; 
    String outValue2 = "value2"; 
    thePut.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifier1), Bytes.toBytes(outValue1)); 
    thePut.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifier2), Bytes.toBytes(outValue2)); 
    table.put(thePut); 

    //Get 
    Get theGet = new Get(Bytes.toBytes("rowkey1")); 
    Result result = table.get(theGet); 
    //get value first column 
    String inValue1 = Bytes.toString(result.value()); 
    //get value by ColumnFamily and ColumnName 
    byte[] inValueByte = result.getValue(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifier1)); 
    String inValue2 = Bytes.toString(inValueByte); 

    //loop for result 
    for (Cell cell : result.listCells()) { 
     String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell)); 
     String value = Bytes.toString(CellUtil.cloneValue(cell)); 
     System.out.printf("Qualifier : %s : Value : %s%n", qualifier, value); 
    } 

    //create Map by result and print it 
    Map<String, String> getResult = result.listCells().stream().collect(Collectors.toMap(e -> Bytes.toString(CellUtil.cloneQualifier(e)), e -> Bytes.toString(CellUtil.cloneValue(e)))); 
    getResult.entrySet().stream().forEach(e -> System.out.printf("Qualifier : %s : Value : %s%n", e.getKey(), e.getValue())); 

    System.out.println("---------Scan---------"); 
    Scan scan = new Scan(); 
    ResultScanner resultScan = table.getScanner(scan); 
    resultScan.forEach(e -> { 
     System.out.printf("Row \"%s\"%n", Bytes.toString(e.getRow())); 
     Map<String, String> getResultScan = e.listCells().stream().collect(Collectors.toMap(d -> Bytes.toString(CellUtil.cloneQualifier(d)), d -> Bytes.toString(CellUtil.cloneValue(d)))); 
     getResultScan.entrySet().stream().forEach(d -> System.out.printf("column \"%s\", value \"%s\"%n", d.getKey(), d.getValue())); 
     System.out.println(); 
    }); 
+0

जो मेवेन निर्भरता में एपीआई है? – Normal

+1

मैं org.apache.hbase का उपयोग करता हूं: hbase-client: 1.1.2 –

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