Re: is this correct, thrift unportable to CQL3Š.

2013-09-24 Thread Vikas Goyal
Thanks Sylvain,

However,we tried missing the value but it didn't work :(

So our code is like below where we are using 3 values if colname is not
null..else 2 values..

if (key != null) {
PreparedStatement statement = session.prepare(INSERT INTO
keys.StringIndice (id, colname, colvalue) VALUES (?, ?, ?));
BoundStatement boundStatement = new
BoundStatement(statement);

session.execute(boundStatement.bind(StandardConverters.convertFromBytes(String.class,
rowKey), key, ByteBuffer.wrap(value)));
} else {
PreparedStatement statement = session.prepare(INSERT INTO
 + keys + . + table + (id, colvalue) VALUES (?, ?));
BoundStatement boundStatement = new
BoundStatement(statement);

session.execute(boundStatement.bind(StandardConverters.convertFromBytes(String.class,
rowKey), ByteBuffer.wrap(value)));
  }

And, I did that and getting this exception:

Exception:Missing PRIMARY KEY part colname since colvalue is set

And just FYI. Our Column Family definition is below:

CREATE TABLE keys.StringIndice (id text,
colname text,
colvalue blob,
PRIMARY KEY (id,colname, colvalue)) WITH COMPACT STORAGE)

Thanks again,
Vikas Goyal



On Tue, Sep 24, 2013 at 7:02 PM, Sylvain Lebresne sylv...@datastax.comwrote:

 Short answer: not, this is not correct.

 Longer answer: what you call null is actually an empty value (which is
 *not* the same thing, unless you consider an empty string is the same thing
 than a null string). As it happens, C* always an empty value as a valid
 value for any type and that's true of both thrift and CQL3. What is true is
 that CQL3 discourage the use of empty values for type for which it doesn't
 particularly make sense (integers typically) by not having a particular
 easy to use syntax to input them. But that's supported nonetheless. If you
 use a prepared statement for instance (where you send values already
 serialized), nothing will prevent you from sending an empty value. Even if
 you don't want to use a prepared statement, CQL3 has conversion functions (
 http://cassandra.apache.org/doc/cql3/CQL.html#blobFun) that allows to do
 it (for instance, blobAsInt(0x) will be an empty int value).

 --
 Sylvain



 On Tue, Sep 24, 2013 at 2:36 PM, Hiller, Dean dean.hil...@nrel.govwrote:

 Many applications in thrift use the wide row with composite column name
 and as an example, let's say golf score for instance and we end up with
 golf score : pk like so

 null : pk56
 null : pk45
 89 : pk90
 89: pk87
 90: pk101
 95: pk17

 Notice that there are some who do not have a golf score(zero would not
 quite make sense and would be interpreted as a golf score).  I am hearing
 from this post if they are correct that this is not portable to CQL3???  Is
 this true?
 http://stackoverflow.com/questions/18963248/how-can-i-have-null-column-value-for-a-composite-key-column-in-cql3

 (This sounds like a major deficit to me as the wide row now can only be
 used where actual values exist?).  Is it possible to port this pattern
 to CQL3?

 Thanks,
 Dean






Re: is this correct, thrift unportable to CQL3Š.

2013-09-24 Thread Vikas Goyal
Ok. Great. It works for String and Decimal/Float but not for integer data
type..
i.e,, if I am passing  to the composite key column which is either text
or float, it works..

session.execute(boundStatement.bind(rowkey, , ByteBuffer.wrap(value)));

But not working with bigint, int or varint..and getting following exception;

Exception:Invalid type for value 1 of CQL type varint, expecting class
java.math.BigInteger but class java.lang.String provided

..I am exploring more though..

Thanks a ton,
Vikas Goyal


On Tue, Sep 24, 2013 at 9:05 PM, Sylvain Lebresne sylv...@datastax.comwrote:


 However,we tried missing the value but it didn't work :(


 Right, because not providing a value is akin to having a null value (in
 the CQL3 sense of the term, which is different from what Dean asked about)
 and null values are not allowed for primary key columns.
 You could however insert an *empty* value if you wanted, which in you case
 is just inserting an empty string since colname is a string. Thrift doesn't
 allow more or less in that case.

 --
 Sylvain




 So our code is like below where we are using 3 values if colname is not
 null..else 2 values..

 if (key != null) {
 PreparedStatement statement = session.prepare(INSERT
 INTO keys.StringIndice (id, colname, colvalue) VALUES (?, ?, ?));
 BoundStatement boundStatement = new
 BoundStatement(statement);

 session.execute(boundStatement.bind(StandardConverters.convertFromBytes(String.class,
 rowKey), key, ByteBuffer.wrap(value)));
 } else {
 PreparedStatement statement = session.prepare(INSERT
 INTO  + keys + . + table + (id, colvalue) VALUES (?, ?));
 BoundStatement boundStatement = new
 BoundStatement(statement);

 session.execute(boundStatement.bind(StandardConverters.convertFromBytes(String.class,
 rowKey), ByteBuffer.wrap(value)));
   }

 And, I did that and getting this exception:

 Exception:Missing PRIMARY KEY part colname since colvalue is set

 And just FYI. Our Column Family definition is below:

 CREATE TABLE keys.StringIndice (id text,
 colname text,
  colvalue blob,
 PRIMARY KEY (id,colname, colvalue)) WITH COMPACT STORAGE)

 Thanks again,
 Vikas Goyal



 On Tue, Sep 24, 2013 at 7:02 PM, Sylvain Lebresne 
 sylv...@datastax.comwrote:

 Short answer: not, this is not correct.

 Longer answer: what you call null is actually an empty value (which is
 *not* the same thing, unless you consider an empty string is the same thing
 than a null string). As it happens, C* always an empty value as a valid
 value for any type and that's true of both thrift and CQL3. What is true is
 that CQL3 discourage the use of empty values for type for which it doesn't
 particularly make sense (integers typically) by not having a particular
 easy to use syntax to input them. But that's supported nonetheless. If you
 use a prepared statement for instance (where you send values already
 serialized), nothing will prevent you from sending an empty value. Even if
 you don't want to use a prepared statement, CQL3 has conversion functions (
 http://cassandra.apache.org/doc/cql3/CQL.html#blobFun) that allows to
 do it (for instance, blobAsInt(0x) will be an empty int value).

 --
 Sylvain



 On Tue, Sep 24, 2013 at 2:36 PM, Hiller, Dean dean.hil...@nrel.govwrote:

 Many applications in thrift use the wide row with composite column name
 and as an example, let's say golf score for instance and we end up with
 golf score : pk like so

 null : pk56
 null : pk45
 89 : pk90
 89: pk87
 90: pk101
 95: pk17

 Notice that there are some who do not have a golf score(zero would not
 quite make sense and would be interpreted as a golf score).  I am hearing
 from this post if they are correct that this is not portable to CQL3???  Is
 this true?
 http://stackoverflow.com/questions/18963248/how-can-i-have-null-column-value-for-a-composite-key-column-in-cql3

 (This sounds like a major deficit to me as the wide row now can only be
 used where actual values exist?).  Is it possible to port this pattern
 to CQL3?

 Thanks,
 Dean








Does collection in CQL3 have certain limits?

2013-09-02 Thread Vikas Goyal
As there are two ways to support wide rows in CQL3..One is to use composite
keys and another is to use collections like Map, List and Set. The
composite keys method can have millions of columns (transposed to rows)..
This is solving some of our use cases.

However, if we use collections, I want to know if there is a limit that the
collections can store a certain number/amount of data (Like earlier with
Thrift C* supports up-to 2 billion columns in a row)


Thanks,

Vikas Goyal


PlayOrm latest release is available in Maven now

2013-01-15 Thread Vikas Goyal
For those who are using playorm for cassandra, latest release (1.4.4) is
available in maven repo now. It has following new features:


   - Support for @NoSqlEmbedable for user defined entities.
   - In SJQL, Ability to
  - Delete rows(DELETE),
  - Delete a single column(DELETECOLUMN),
  - Query with IN attribute and
  - Also ORDER BY ..is now added


   - Astyanax version is upgraded to 1.56.18
   - Storage type of *ToOne is changed to composite.
   - Command line tool now provides support for @NoSqlEmbedded and
   @NoSqlEmbedable
   - Added support for DateTime as index and also support for querying the
   JodaTimes
   -