In case anyone else is curious about what is going on here:
https://github.com/pycassa/pycassa/issues/112

The links to the Cassandra JIRA are instructive.

-Bryce

On Wed, 8 Feb 2012 10:59:37 -0600
Bryce Allen <bal...@ci.uchicago.edu> wrote:
> Never mind; the issue with addressing composite column names with
> empty components was fixed in the latest pycassa, which is why I was
> even able to create them in the Test3 schema below. I get an error in
> 1.2.1 which I used to be running, but it all seems to work in 1.4.0.
> 
> -Bryce
> 
> On Wed, 8 Feb 2012 10:25:07 -0600
> Bryce Allen <bal...@ci.uchicago.edu> wrote:
> > I have a CF defined like this in CLI syntax:
> > 
> > create column family Test
> >     with key_validation_class = UTF8Type
> >     and comparator = 'CompositeType(AsciiType, UTF8Type)'
> >     and default_validation_class = UTF8Type
> >     and column_metadata = [
> >         { column_name : 'deleted:',
> >           validation_class : BooleanType },
> >         { column_name : 'version:',
> >           validation_class : LongType },
> >     ];
> > 
> > I expected these columns to map to ("deleted", "") and ("version",
> > "") in pycassa, but this is not the case:
> > 
> >   TEST.insert("r1", { ("deleted", ""): False, ("version", ""): 1,
> >                   ("a", "b"): "c" })
> >   AttributeError: 'int' object has no attribute 'encode'
> > 
> >   TEST.column_validators
> >   {'\x00\x07deleted\x00': 'BooleanType',
> >    '\x00\x07version\x00': 'LongType'}
> > 
> > The obvious workaround is to use pycassa to define the schema:
> > 
> >   SYSTEM_MANAGER.create_column_family("test", "Test2",
> >     key_validation_class=UTF8_TYPE,
> >     comparator_type=CompositeType(ASCII_TYPE, UTF8_TYPE),
> >     default_validation_class=UTF8_TYPE,
> >     column_validation_classes={
> >       ("version", ""): LONG_TYPE,
> >       ("deleted", ""): BOOLEAN_TYPE })
> > 
> > and this does really produce a different schema:
> >   
> >   TEST2.column_validators
> >   {'\x00\x07version\x00\x00\x00\x00': 'LongType',
> >    '\x00\x07deleted\x00\x00\x00\x00': 'BooleanType'}
> > 
> > To mimic what CLI does, I leave off the last component instead of
> > using "":
> > 
> >   SYSTEM_MANAGER.create_column_family("test", "Test3",
> >     key_validation_class=UTF8_TYPE,
> >     comparator_type=CompositeType(ASCII_TYPE, UTF8_TYPE),
> >     default_validation_class=UTF8_TYPE,
> >     column_validation_classes={
> >       ("version",): LONG_TYPE,
> >       ("deleted",): BOOLEAN_TYPE })
> > 
> >   TEST3.column_validators
> >   {'\x00\x07deleted\x00': 'BooleanType',
> >    '\x00\x07version\x00': 'LongType'}
> > 
> > But I see no way to address these columns from pycassa. I have a
> > workaround, but I find the inconsistency perplexing, and would
> > rather not have to do the busywork to convert my schema syntax. Is
> > there a way to address columns with an empty string component in
> > the CLI?
> > 
> > Thanks,
> > Bryce

Attachment: signature.asc
Description: PGP signature

Reply via email to