It sounds like you want this:

create table data ( pk int, colname blob, value blob, primary key (pk, 
colname));

that gives you arbitrary columns (cleverly labeled colname) in a single row, 
where the value is "value". 

If you don't want the overhead of storing "colname" in every row, try with 
compact storage.

Does this solve the problem, or am I missing something?

On Aug 30, 2013, at 11:45 AM, Peter Lin <wool...@gmail.com> wrote:

> 
> you could dynamically create new tables at runtime and insert rows into the 
> new table, but is that better than using thrift and putting it into a regular 
> dynamic column with the exact name type and value type?
> 
> that would mean if there's 20 dynamic columns of different types, you'd have 
> to execute 21 queries to rebuild the data. That's basically the same as using 
> EVA tables in relational databases.
> 
> Having used that approach in the past to build temporal databases, it doesn't 
> scale well.
> 
> 
> 
> On Fri, Aug 30, 2013 at 2:40 PM, Vivek Mishra <mishra.v...@gmail.com> wrote:
> create a column family as:
> 
> create table dynamicTable(key text, nameAsDouble double, valueAsBlob blob);
> 
> insert into dynamicTable(key, nameAsDouble, valueAsBlob) values ( "key", 
> double(102.211), textAsBlob('valueInBytes').
> 
> Do you think, it will work in case column name are double?
> 
> -Vivek
> 
> 
> On Sat, Aug 31, 2013 at 12:03 AM, Peter Lin <wool...@gmail.com> wrote:
> 
> In the interest of education and discussion.
> 
> I didn't mean to say CQL3 doesn't support dynamic columns. The example from 
> the page shows default type defined in the create statement.
> create column family data 
> with key_validation_class=Int32Type 
>  and comparator=DateType 
>  and default_validation_class=FloatType;
> 
> 
> If I try to insert a dynamic column that uses double for column name and 
> string for column value, it will throw an error. The kind of use case I'm 
> talking about defines a minimum number of static columns. Most of the columns 
> that are added at runtime are different name and value type. This is specific 
> to my use case.
> 
> Having said that, I believe it "would" be possible to provide that kind of 
> feature in CQL, but the trade off is it deviates from SQL. The grammar would 
> have to allow type declaration in the columns list and functions in the 
> values. Something like
> 
> insert into mytable (KEY, doubleType(newcol1), string(newcol2)) values 
> ('abc123', "some string", double(102.211))
> 
> doubleType(newcol1) and string(newcol2) are dynamic columns.
> 
> I know many people find thrift hard to grok and struggle with it, but I'm a 
> firm believer in taking time to learn. Every developer should take time to 
> read cassandra source code and the source code for the driver they're using.
> 
> 
> 
> On Fri, Aug 30, 2013 at 2:18 PM, Jonathan Ellis <jbel...@gmail.com> wrote:
> http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows
> 
> 
> On Fri, Aug 30, 2013 at 12:53 PM, Peter Lin <wool...@gmail.com> wrote:
> 
> my bias perspective, I find the sweet spot is thrift for insert/update and 
> CQL for select queries.
> 
> CQL is too limiting and negates the power of storing arbitrary data types in 
> dynamic columns.
> 
> 
> On Fri, Aug 30, 2013 at 1:45 PM, Jon Haddad <j...@jonhaddad.com> wrote:
> If you're going to work with CQL, work with CQL.  If you're going to work 
> with Thrift, work with Thrift.  Don't mix.
> 
> On Aug 30, 2013, at 10:38 AM, Vivek Mishra <mishra.v...@gmail.com> wrote:
> 
>> Hi,
>> If i a create a table with CQL3 as 
>> 
>> create table user(user_id text PRIMARY KEY, first_name text, last_name text, 
>> emailid text);
>> 
>> and create index as:
>> create index on user(first_name);
>> 
>> then inserted some data as:
>> insert into user(user_id,first_name,last_name,"emailId") 
>> values('@mevivs','vivek','mishra','vivek.mis...@impetus.co.in');
>> 
>> 
>> Then if update same column family using Cassandra-cli as:
>> 
>> update column family user with key_validation_class='UTF8Type' and 
>> column_metadata=[{column_name:last_name, validation_class:'UTF8Type', 
>> index_type:KEYS},{column_name:first_name, validation_class:'UTF8Type', 
>> index_type:KEYS}];
>> 
>> 
>> Now if i connect via cqlsh and explore user table, i can see column 
>> first_name,last_name are not part of table structure anymore. Here is the 
>> output:
>> 
>> CREATE TABLE user (
>>   key text PRIMARY KEY
>> ) WITH
>>   bloom_filter_fp_chance=0.010000 AND
>>   caching='KEYS_ONLY' AND
>>   comment='' AND
>>   dclocal_read_repair_chance=0.000000 AND
>>   gc_grace_seconds=864000 AND
>>   read_repair_chance=0.100000 AND
>>   replicate_on_write='true' AND
>>   populate_io_cache_on_flush='false' AND
>>   compaction={'class': 'SizeTieredCompactionStrategy'} AND
>>   compression={'sstable_compression': 'SnappyCompressor'};
>> 
>> cqlsh:cql3usage> select * from user;
>> 
>>  user_id
>> ---------
>>  @mevivs
>> 
>> 
>> 
>> 
>> 
>> I understand that, CQL3 and thrift interoperability is an issue. But this 
>> looks to me a very basic scenario.
>> 
>> 
>> 
>> Any suggestions? Or If anybody can explain a reason behind this?
>> 
>> -Vivek
>> 
>> 
>> 
>> 
> 
> 
> 
> 
> 
> -- 
> Jonathan Ellis
> Project Chair, Apache Cassandra
> co-founder, http://www.datastax.com
> @spyced
> 
> 
> 

Reply via email to