Thanks Eric for the detailed explanation but can you point to a source or document for this restriction in CQL3 tables? Doesn't it take away the main feature of the NoSQL store? Or am I am missing something obvious here?
Regards, Shahab On Tue, Jun 4, 2013 at 2:12 PM, Eric Stevens <migh...@gmail.com> wrote: > If this is a standard column family, not a CQL3 table, then using CQL3 > will not give you the results you expect. > > From cassandra-cli, let's set up some test data: > > [default@unknown] create keyspace test; > [default@unknown] use test; > [default@test] create column family test; > [default@test] set test['a1']['c1'] = 'a1c1'; > [default@test] set test['a1']['c2'] = 'a1c2'; > [default@test] set test['a2']['c1'] = 'a2c1'; > [default@test] set test['a2']['c2'] = 'a2c2'; > > Two rows with two columns each, right? Not as far as CQL3 is concerned: > > cqlsh> use test; > cqlsh:test> select * from test; > > key | column1 | value > -----+---------+-------- > a2 | 0xc1 | 0xa2c1 > a2 | 0xc2 | 0xa2c2 > a1 | 0xc1 | 0xa1c1 > a1 | 0xc2 | 0xa1c2 > > Basically for CQL3, without the additional metadata and enforcement that > is established by having created the column family as a CQL3 table, CQL > will treat each key/column pair as a separate row for CQL purposes. This > is most likely at least in part due to the fact that CQL3 tables *cannot > have arbitrary columns *like standard column families can. It wouldn't > know what columns are available for display. This also exposes some of the > underlying structure behind CQL3 tables. > > CQL 3 is not reverse compatible with CQL 2 for most things. If you cannot > migrate your data to a CQL3 table. > > The equivalent structure in CQL3 tables > > cqlsh:test> create table test3 (key text PRIMARY KEY, c1 text, c2 text); > cqlsh:test> INSERT INTO test3(key, c1, c2) VALUES ('a1', 'a1c1', 'a1c2'); > cqlsh:test> INSERT INTO test3(key, c1, c2) VALUES ('a2', 'a2c1', 'a2c2'); > cqlsh:test> select * from test3; > > key | c1 | c2 > -----+------+------ > a2 | a2c1 | a2c2 > a1 | a1c1 | a1c2 > > This comes with many important restrictions, one of which as mentioned is > that you cannot have arbitrary columns in a CQL3 table, just like you > cannot in a traditional relational database. Likewise you cannot use > traditional approaches to populating data into a CQL3 table: > > [default@test] get test3['a1']; > test3 not found in current keyspace. > [default@test] set test3['a3']['c1'] = 'a3c1'; > test3 not found in current keyspace. > [default@test] describe test3; > WARNING: CQL3 tables are intentionally omitted from 'describe' output. > > > > > On Tue, Jun 4, 2013 at 12:56 PM, ekaqu something <ekaqu1...@gmail.com>wrote: > >> I run a 1.1 cluster and currently testing out a 1.2 cluster. I have >> noticed that with 1.2 it switched to CQL3 which is acting differently than >> I would expect. When I do "select key from \"cf\";" I get many many >> duplicate keys. When I did the same with CQL 2 I only get the keys >> defined. This seems to also be the case for count(*), in cql2 it would >> return the number of keys i have, in 3 it returns way more than i really >> have. >> >> $ cqlsh `hostname` <<EOF >> use keyspace; >> select count(*) from "cf"; >> EOF >> >> >> count >> ------- >> 10000 >> >> Default LIMIT of 10000 was used. Specify your own LIMIT clause to get >> more results. >> >> $ cqlsh `hostname` -3 <<EOF >> use keyspace; >> select count(*) from "cf"; >> EOF >> >> >> count >> ------- >> 10000 >> >> Default LIMIT of 10000 was used. Specify your own LIMIT clause to get >> more results. >> >> >> $ cqlsh `hostname` -2 <<EOF >> use keyspace; >> select count(*) from cf; >> EOF >> >> >> count >> ------- >> 1934 >> >> 1934 rows have really been inserted. Is there something up with cql3 or >> is there something else going on? >> >> Thanks for your time reading this email. >> > >