cassandrahector

need a counter query which give all counter for a primary key using hector API


I am using hector API for cassandra.

i create a counter table like follows

 private void addColumnFamilyCounter(ThriftCluster cluster, String cfName, int rowCacheKeysToSave) {
    String cassandraKeyspace = this.env.getProperty("cassandra.keyspace");

    ThriftCfDef cfd =
            new ThriftCfDef(cassandraKeyspace, cfName, ComparatorType.UTF8TYPE);

    cfd.setRowCacheKeysToSave(rowCacheKeysToSave);
    cfd.setDefaultValidationClass(ComparatorType.COUNTERTYPE.getClassName());
    cluster.addColumnFamily(cfd);
}

and call the above method like follows

        addColumnFamilyCounter(cluster, COUNTER_CF, 0);

The format of the table is like follows

        Primary key             columns
         Munich                 jingle : 1
                                mingle : 2
                                tingle : 1
                                pingle : 5

Now i want to execute a query to get all the columns and their values under Munich. is there any way i can get all the columns.

What i knw till now is the following query but it gives me value for only a combination of primary key and a column key.

       @Override
public long getTagCounter(String domain, String tag) {
    CounterQuery<String, String> counter =
            new ThriftCounterColumnQuery<String, String>(keyspaceOperator,
                    StringSerializer.get(),
                    StringSerializer.get());

    counter.setColumnFamily(TAG_COUNTER_CF).setKey("p_key").setName("name");
    return counter.execute().get().getValue();
}

Solution

  • I found the answer:

    CounterSlice<String> query = HFactory.createCounterSliceQuery(keyspaceOperator , StringSerializer.get(), StringSerializer.get())
                .setColumnFamily("CF")
                .setKey("PK")
                .setRange(null, null, false, Integer.MAX_VALUE).execute().get();
        
        for(HCounterColumn<String> col : query.getColumns()){
                   log.info(col.getName());
                   log.info(col.getvalue());
         }