incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin Burton" <rkevinbur...@charter.net>
Subject RE: CF metadata syntax for an array
Date Wed, 14 Nov 2012 22:27:52 GMT
I hope I am not bugging you but now what is the purpose of PRIMARY_KEY(id,
item_id)? By expressing the KEY as two values this basically gives the
database a hint that this will be an array? Is there an implicit INDEX on id
and item_id? Thanks again.

-----Original Message-----
From: aaron morton [mailto:aaron@thelastpickle.com] 
Sent: Wednesday, November 14, 2012 4:08 PM
To: user@cassandra.apache.org
Subject: Re: CF metadata syntax for an array

Like this?

cqlsh:dev> CREATE TABLE my_orders(
       ...     id int, 
       ...     item_id int, 
       ...     price decimal, 
       ...     title text, 
       ...     PRIMARY KEY(id, item_id)
       ... );

cqlsh:dev> insert into my_orders 
       ...     (id, item_id, price, title)
       ... values
       ...     (1, 1, 4, 'this is an example');
cqlsh:dev> insert into my_orders 
       ...     (id, item_id, price, title)
       ... values
       ...     (1, 2, 8, 'this is another example');
cqlsh:dev> insert into my_orders 
       ...     (id, item_id, price, title)
       ... values
       ...     (1, 3, 6, 'this is the last example');

cqlsh:dev> select * from my_orders where id = 1;  id | item_id | price |
title
----+---------+-------+--------------------------
  1 |       1 |     4 |       this is an example
  1 |       2 |     8 |  this is another example
  1 |       3 |     6 | this is the last example




-----------------
Aaron Morton
Freelance Cassandra Developer
New Zealand

@aaronmorton
http://www.thelastpickle.com

On 15/11/2012, at 10:38 AM, Kevin Burton <rkevinburton@charter.net> wrote:

> An array would be a list of groups of items. In my case I want a
list/array of line items. An order has certain characteristics and one of
them is a list of the items that are being ordered. Say ever line item has
an id, price, and description so one such "array" would look like:
>  
> 1 $4.00 "This is an example"
> 2 $8.00 "This is another example"
> 3 $6.00 "This is the last example"
>  
> So in this case the array would be the three items listed above.  So the
"column" is repeated three times for this order.
>  
> From: aaron morton [mailto:aaron@thelastpickle.com]
> Sent: Wednesday, November 14, 2012 3:05 PM
> To: user@cassandra.apache.org
> Subject: Re: CF metadata syntax for an array
>  
> In both cases the array is the PRIMARY_KEY. 
> I'm not sure what you mean by the "array" 
>  
> The vector_name and list_name columns are used as "variable names" to
identify a particular vector or list. They are the storage engine "row key".
>  
> Cheers
>  
> -----------------
> Aaron Morton
> Freelance Cassandra Developer
> New Zealand
>  
> @aaronmorton
> http://www.thelastpickle.com
>  
> On 14/11/2012, at 5:31 PM, Kevin Burton <rkevinburton@charter.net> wrote:
> 
> 
> Does the  array have to be a KEY?
> Sorry I don't understand this question. 
>  
> In the samples you give you specify array as
>  
>                         CREATE COLUMNFAMILY Description (
>                                                        PRIMARY_KEY
(vector_name, index),
>                                                        Age text,
>                                                        Gender text,
>                                                       vector_name text,
>                                                       index bigint, 
> ...
>  
> Or
>                         CREATE COLUMNFAMILY Description (
>                                                        PRIMARY_KEY
(listr_name, sort_key),
>                                                        Age text,
>                                                        Gender text,
>                                                        sort_key bigint,
>                                                       list_name text 
> ..
> 
> 
> In both cases the array is the PRIMARY_KEY. In order for an array to work
does the array have to be a KEY?
>  
> From: aaron morton [mailto:aaron@thelastpickle.com]
> Sent: Tuesday, November 13, 2012 10:18 PM
> To: user@cassandra.apache.org
> Subject: Re: CF metadata syntax for an array
> 
>  
> Would this syntax be the same for CREATE COLUMNFAMILY (as an aside what is
a 'TABLE' in Cassandra)?
> Yes, CQL 2 uses COLUMN FAMILY or Table and CQL 3 uses TABLE
>  
> http://www.datastax.com/dev/blog/cql3-evolutions
>  
> In other words is this valid:
> Does it work ? Is so it's valid. 
>  
> Does the  array have to be a KEY?
> Sorry I don't understand this question. 
>  
> Finally, what would be the syntax for inserting data into the CF?
> Depends on what you want to do.
> Docs are a good starting point 
> http://www.datastax.com/docs/1.1/references/cql/index
>  
> Cheers
>  
> -----------------
> Aaron Morton
> Freelance Developer
> @aaronmorton
> http://www.thelastpickle.com
>  
> On 14/11/2012, at 2:42 AM, Kevin Burton <rkevinburton@charter.net> wrote:
> 
> 
> 
> Sorry to be so slow but I am just learning CQL. Would this syntax be the
same for CREATE COLUMNFAMILY (as an aside what is a 'TABLE' in Cassandra)?
In other words is this valid:
>  
>                         CREATE COLUMNFAMILY Description (
>                                                        PRIMARY_KEY
(vector_name, index),
>                                                        Age text,
>                                                        Gender text,
>                                                       vector_name text,
>                                                       index bigint, 
> ...
>  
> Or
>                         CREATE COLUMNFAMILY Description (
>                                                        PRIMARY_KEY
(listr_name, sort_key),
>                                                        Age text,
>                                                        Gender text,
>                                                        sort_key bigint,
>                                                       list_name text 
> ..
> 
> 
> 
> Does the  array have to be a KEY? Finally, what would be the syntax for
inserting data into the CF?
>  
> Thanks again.
>  
> From: aaron morton [mailto:aaron@thelastpickle.com]
> Sent: Tuesday, November 13, 2012 4:09 AM
> To: user@cassandra.apache.org
> Subject: Re: CF metadata syntax for an array
>  
> While this solves the problem for an array of 'primitive' types. What if I
want an array or collection of an arbitrary type like list<foo>, where foo
is a user defined type?
> Do you mean a custom Cassandra data type that sub classes AbstractType? I
dont think CQL can support those, I may be wrong though. 
>  
> If you mean a basic client side data type you could serialise it and store
as a string or byte buffer in a CQL collection. 
>  
> What are the options to solve this type of array? 
> ...
> 
> 
> 
> arbitrary type like list<foo>,
> Do you mean an array such as int[] or do you mean the equivalent of a java
List<T> with functions like remove that actually delete items and from the
list?
>  
> If it's the former a CQL table such as below would work
>  
> CREATE TABLE vectors (
>             vector_name text,
>             index bigint,
>             object_property_1 text,
>             object_property_2 text,
>             PRIMARY_KEY (vector_name, index) );
>  
> The problem is, if you delete a element at (vector, index) the remaining
indexes will be off.
>  
> If it's the later, a List<T>, then it depends a little on what 
> features you want to support. If you want a sorted list of objects the 
> table is roughly the same
>  
> CREATE TABLE List (
>             list_name text,
>             sort_key bigint,
>             object_property_1 text,
>             object_property_2 text,
>             PRIMARY_KEY (list_name, sort_key) );
>  
> Hope that helps. 
>  
> -----------------
> Aaron Morton
> Freelance Developer
> @aaronmorton
> http://www.thelastpickle.com
>  
> -----------------
> Aaron Morton
> Freelance Developer
> @aaronmorton
> http://www.thelastpickle.com
>  
> On 13/11/2012, at 9:46 AM, Kevin Burton <rkevinburton@charter.net> wrote:
> 
> 
> 
> 
> While this solves the problem for an array of 'primitive' types. What if I
want an array or collection of an arbitrary type like list<foo>, where foo
is a user defined type? I am guessing that this cannot be done with
'collections'. What are the options to solve this type of array?
> 
> On Nov 12, 2012, at 2:28 PM, aaron morton <aaron@thelastpickle.com> wrote:
> 
> This may help http://www.datastax.com/dev/blog/cql3_collections
>  
>  I have gotten as far as feeling a need to understand a 'super-column' 
> You can happily ignore them.
>  
>  
> Cheers
>  
> -----------------
> Aaron Morton
> Freelance Developer
> @aaronmorton
> http://www.thelastpickle.com
>  
> On 12/11/2012, at 8:35 PM, Kevin Burton <rkevinburton@charter.net> wrote:
> 
> 
> 
> 
> I am sorry if this is an FAQ. But I was wondering what the syntax for
describing an array? I have gotten as far as feeling a need to understand a
'super-column' but I fail after that. Once I have the metadata in place to
describe an array how do I  insert data into the array? Get data from the
array? Thank you.
>  
>  



Mime
View raw message