3
votes

This article discusses possible ways CQL 3 could be used for creating composite columns in Cassandra 1.1. They are just ideas. Nothing is official, and the Datastax documentation doesn't cover this (only composite keys).

As I understand it, composite columns are a number of columns that together have only one value.

How do you create them with CQL?

EDIT

I will be using C# to interface into Cassandra. CQL looks straightforward to use, which is why I want to use it.

3
stackoverflow.com/questions/10950338/… the same question and answer is if you use multiple primary keys then the first is used as partition key and others represent composite column [specify all columns in primary keys to simulate cli version of composite columns]Tamil
@Tamil I know. But composite columns can be separate. There are many examples of this on the Net. One may wish to have a composite PK and multiple composite columns.IamIC
@Tamil, according to The Paul, you are correct!IamIC
Glad that you came to a conclusion :)Tamil
@Tamil You've obviously been working at this longer than me. I'm going to make a suggestion to Datastax on how to help clarify their documentation. Thanks for your help mate.IamIC

3 Answers

4
votes

You've got a couple concepts confused, I think. Quite possibly this is the fault of the Datastax documentation; if you have any good suggestions for making it clearer after you have a better picture, I'll be glad to send them on.

The "composite keys" stuff in the Datastax docs is actually talking about composite Cassandra columns. The reason for the confusion is that rows in CQL 3 do not map directly to storage engine rows (what you work with when you use the thrift interface). "Composite key" in the context of a CQL table just means a primary key which consists of multiple columns, which is implemented by composite columns at the storage layer.

This article is one of the better explanations as to how the mapping happens and why the CQL model is generally easier to think about.

With this sort of use, the first CQL column becomes being the storage engine partition key.

As of Cassandra 1.2 (in development), it's also possible to create composite storage engine keys using CQL, by putting extra parentheses in the PRIMARY KEY definition around the CQL columns that will be stored in the partition key (see CASSANDRA-4179), but that's probably going to be the exception, not the rule.

2
votes

With Cassandra, you store data in rows. Each row has a row key and some number of columns. Each column has a name and a value. Usually the column name and value (and row key, for that matter) are single values (int, long, UTF8, etc), but you can use composite values in row keys, column names and column values. A composite value is just some number of values that have been serialized together in some way.

Over time a number of language-specific API's have been developed. These API's start with the understanding I describe above and provide access to a Column Family accordingly. Hector, the java client API, is the one I'm most familiar with, but there are others.

CQL was introduced as a means to use Cassandra tables in an SQL/JDBC fashion. Not all Cassandra capabilities were supported through CQL at first, although CQL is getting more and more functional as time goes on.

I don't doubt your need for composite column names and values (I believe that's what your asking for). The problem is that CQL has yet to evolve (as I understand it) to that level of native support. Whether or not it ever will is not known to me.

I suggest that you complete the definition of your desired column family schemas, complete with composite values if necessary. Once you've done that, look at the various API's available to access Cassandra column families and choose the one that best supports your desired schema.

You haven't said what language you're using. If you were coding in java then I'd recommend Hector and not CQL.

0
votes

Are you sure you want to create them with CQL? What is your use case?