Search code examples
cassandracounterastyanaxcql3compound-key

Astyanax getKey with compound key


I would like to run the following code with a compound primary key.

Column<String> result = keyspace.prepareQuery(CF_COUNTER1)
    .getKey(rowKey)
    .getColumn("Column1")
    .execute().getResult();
Long counterValue = result.getLongValue();

Research seems to show that it can be a string that represents a key (if it's not a compound primary key). The documentation says that it is of type K, alas, I am not very experience with Java, and have no idea what that means. Is it just a base type that lots of stuff inherits from? If so, I'm not really any closer to knowing what getKey(K) needs in order to handle a compound key (am I?).


Solution

  • You just need to write a class that fits the columns in your data model. You can then give this class to Astyanax in your mutations or queries.

    For example, if you had a data model like this

       CREATE TABLE fishblogs (
            userid varchar,
            when timestamp,
            fishtype varchar,
            blog varchar,
            image blob,
            PRIMARY KEY (userid, when, fishtype)
        );
    

    you would create a class like this:

       public class FishBlog {
          @Component(ordinal = 0)
          public long when;
          @Component(ordinal = 1)
          public String fishtype;
          @Component(ordinal = 2)
          public String field;
    
          public FishBlog() {
          }
       }
    

    When and fishtype form your composite column key and are represented by the FishBlog class. Userid would be your row/partition key and can be of the simple "string" type.

    Have a look at this blog explaining in great detail how to insert data with composite keys (where I took this example from).

    Hope that helps.