Domanda

I would like to create a table in Cassandra using CQL3 queries with structure similar to:

myTable
        myTable_uuid 
            <key_1|second_key_1> : <value_1>,
            <key_1|second_key_2> : <value_2>,
            <key_1|second_key_3> : <value_3>,
            <key_2|second_key_4> : <value_4>,
            <key_2|second_key_5> : <value_5>,
            <key_2|second_key_6> : <value_6>
            PRIMARY KEY(myTable_uuid, first_key_1, first_key_2, second_key_1)

Table/CF name is 'myTable' and myTable_uuid is the row key. Additionally I would like to create composite column keys, using CQL3, to be able to group data (key_1 and key_2 form the groups). Is this supported? If yes could someone help me with an example CQL3 query, or the syntax.

Purpose: I am trying to design CFs so that data/values are grouped logically, something like the data model explained in Cassandra at ebay blog (http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/).

UPDATE

I am designing keeping in mind my application and the queries I need. I should have used a real-life query instead of dummy, but here is what I am trying to achieve:

myTable
        myTable_uuid 
            <email|fname> : <value_1>,
            <email|lname> : <value_2>,
            <email|age> : <value_3>,
            <email|timestamp> : <value_4>,
            <shool_id|school_name> : <value_5>,
            <shool_id|zip_code> : <value_6>
            PRIMARY KEY(myTable_uuid, email, school_id, school_name)

The <email|fname> , <email|lname>, <email|age>, <shool_id|school_name> and <shool_id|zip_code> would behave as 'Composite Column Keys' and not Row Keys, the table has 'myTable_uuid' as it's Row Key. This approach would help me to group my data into 'email' and 'school_id'. How do I create 'Composite Column Keys' and is it supported to query based on only 1 of the Composite CK? For example:

SELECT fname, age WHERE email = 'xyz@gmail.com'

I'm using Cassandra 1.2.6 and CQL3. Any help is appreciated.

È stato utile?

Soluzione

Yes, this is supported. CQL3 supports all features. (Except deleting columns, but this will be fixed pretty soon, does not take up much storage in the meanwhile and is off-topic).

In CQL3, composite column keys are created by adding them to the primary keys clause. The first key given forms the row key, all following columns form a (composite) column key. This blog entry explains it really well.

CREATE TABLE myTable 
(
  myId uuid, 
  key_1 varchar,
  key_2 varchar,
  value varchar, 
  PRIMARY KEY (myId, key_1, key_2)
);

Thus, myId would be the partition key and key_1 and key_2 would "group" the data and form a composite column key.

Hope that helps.

Altri suggerimenti

I think what you want is to have the key_1 and key_2 to be of type map as per the supported data types in CQL3

You should first think about queries you need to execute. And then think about table design. But don't think first about table design. From your question it is not clear what queries are you going to execute. I can come up with many queries for which this table design is not a good fit at all.

If your question is about some technical details....then, yes, Cassandra supports composite primary keys.

If you write your queries here you could get more valuable feedback.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top