Tuesday, 7 May 2013

Cassandra: Read data from table using Hector API


Here is an example Cassandra Table(column Family) "hbtable" in "mykeyspace" :

cqlsh:mykeyspace>select * from hbtable;
rowkey | cf | quantifier | value
--------+---------+------------+-------
row-2 | colfam1 | quan2 | val2
row-1 | colfam1 | quan1 | val1

 Now lets read the data from this table using Hector API:

 public class SimpleReadHector {                                                  
    public static void main(String[] args) {
       
        Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "192.168.213.1:9160, 192.168.213.2.:9160");
           Keyspace keyspace = HFactory.createKeyspace("mykeyspace", cluster);
        Serializer se= StringSerializer.get() ;
// CqlQuery API lets you execute a cql query
        CqlQuery cqlQuery = new CqlQuery(keyspace, se, se,se);
        cqlQuery.setQuery("select * from hbtable");
        QueryResult> result = cqlQuery.execute();
              OrderedRows orderedRows = result.get(); 
       
        for (Row rrderedRows )
        {
            System.out.println(" "+r);
                   }      
       
// Seond way is to use RangeSlice API , where you can provide keys , ranges etc to read the values
        RangeSlicesQuery rangeSlicesQuery =
                HFactory.createRangeSlicesQuery(keyspace, se,se,se);
            rangeSlicesQuery.setColumnFamily("hbtable");           
            rangeSlicesQuery.setKeys("row-2", "");
              rangeSlicesQuery.setRange("", "", false, 4);
            rangeSlicesQuery.setRowCount(2); //if you need just top two rows to be scanned
            QueryResult> result1 = rangeSlicesQuery.execute();
            OrderedRows orderedRows = result1.get();           
                 
            System.out.println("Contents of rows: \n");                      
            for (Row r : orderedRows) {
                System.out.println("   " + r);
       
    }
   
}
}

No comments:

Post a Comment