incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter Lin <wool...@gmail.com>
Subject Re: CF metadata syntax for an array
Date Wed, 14 Nov 2012 22:35:09 GMT
it means the column family uses composite key, which gives you
additional capabilities like order by in the where clause

On Wed, Nov 14, 2012 at 5:27 PM, Kevin Burton <rkevinburton@charter.net> wrote:
> 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