You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Charles Lamanna <ch...@metricshub.com> on 2012/12/29 02:22:15 UTC

Fixing the schema for a Column Family

Hello folks --

I just ran into this nasty Cassandra issue:
https://issues.apache.org/jira/browse/CASSANDRA-4805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel

As a result, one of my column families had its schema reset. For example,
when I created the column family, this was its schema:

CREATE TABLE values (   rk text,   ck text,   cnt counter,   sum counter,
PRIMARY KEY (rk, ck) );

And now, it's schema has become:

cqlsh:metrics> describe COLUMNFAMILy values;
CREATE TABLE fifteenminutes (  rk text PRIMARY KEY )


*Is there a way to restore the schema? (all my client code expects the
original schema?)*

I can add back the cnt / sum columns by updating the column_metadata in the
Cassandra-Cli -- however, I cannot find a way to fix the compound primary
key. This is the command that restored everything but the compound primary
key:

alter column family values
  with column_type = 'Standard'
  and comparator =
'CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type)'
  and default_validation_class = 'CounterColumnType'
  and key_validation_class = 'UTF8Type'
  and read_repair_chance = 0.0
  and dclocal_read_repair_chance = 0.0
  and gc_grace = 864000
  and min_compaction_threshold = 4
  and max_compaction_threshold = 32
  and replicate_on_write = true
  and compaction_strategy =
'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
  and caching = 'KEYS_ONLY'
  and compression_options = {'sstable_compression' :
'org.apache.cassandra.io.compress.SnappyCompressor'}
  and column_metadata=[
        { column_name:'cnt', validation_class:CounterColumnType },
        { column_name:'sum', validation_class:CounterColumnType }
    ];


Also, FWIW, if I describe the schema of my busted CF, I see the following
errors:

Unexpected table structure; may not translate correctly to CQL. expected
composite key CF to have column aliases, but found none
Unexpected table structure; may not translate correctly to CQL. expected
[u'rk'] length to be 2, but it's 1.


Thanks!
Charles

Re: Fixing the schema for a Column Family

Posted by Michael Kjellman <mk...@barracuda.com>.
I've found that if you drop a column family, the data is still there/snapshotted. If you recreate the column family as expected the data will repopulate the cf.

From: Charles Lamanna <ch...@metricshub.com>>
Reply-To: "user@cassandra.apache.org<ma...@cassandra.apache.org>" <us...@cassandra.apache.org>>
Date: Friday, December 28, 2012 5:22 PM
To: "user@cassandra.apache.org<ma...@cassandra.apache.org>" <us...@cassandra.apache.org>>
Subject: Fixing the schema for a Column Family

Hello folks --

I just ran into this nasty Cassandra issue: https://issues.apache.org/jira/browse/CASSANDRA-4805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel

As a result, one of my column families had its schema reset. For example, when I created the column family, this was its schema:
CREATE TABLE values (   rk text,   ck text,   cnt counter,   sum counter,   PRIMARY KEY (rk, ck) );

And now, it's schema has become:
cqlsh:metrics> describe COLUMNFAMILy values;
CREATE TABLE fifteenminutes (  rk text PRIMARY KEY )

Is there a way to restore the schema? (all my client code expects the original schema?)

I can add back the cnt / sum columns by updating the column_metadata in the Cassandra-Cli -- however, I cannot find a way to fix the compound primary key. This is the command that restored everything but the compound primary key:

alter column family values
  with column_type = 'Standard'
  and comparator = 'CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type)'
  and default_validation_class = 'CounterColumnType'
  and key_validation_class = 'UTF8Type'
  and read_repair_chance = 0.0
  and dclocal_read_repair_chance = 0.0
  and gc_grace = 864000
  and min_compaction_threshold = 4
  and max_compaction_threshold = 32
  and replicate_on_write = true
  and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
  and caching = 'KEYS_ONLY'
  and compression_options = {'sstable_compression' : 'org.apache.cassandra.io.compress.SnappyCompressor'}
  and column_metadata=[
        { column_name:'cnt', validation_class:CounterColumnType },
        { column_name:'sum', validation_class:CounterColumnType }
    ];

Also, FWIW, if I describe the schema of my busted CF, I see the following errors:
Unexpected table structure; may not translate correctly to CQL. expected composite key CF to have column aliases, but found none
Unexpected table structure; may not translate correctly to CQL. expected [u'rk'] length to be 2, but it's 1.

Thanks!
Charles

Join Barracuda Networks in the fight against hunger.
To learn how you can help in your community, please visit: http://on.fb.me/UAdL4f