Search code examples
pythoncassandrauuidpycassa

Generate UUID for Cassandra in Python


Heh, I'm using

cf.insert(uuid.uuid1().bytes_le, {'column1': 'val1'}) (pycassa)

to create a TimeUUID for Cassandra, but getting the error

InvalidRequestException: 
InvalidRequestException(why='UUIDs must be exactly 16 bytes')

It doesn't work with

uuid.uuid1()
uuid.uuid1().bytes
str(uuid.uuid1())

either.

What's the best way to create a valid TimeUUID to use with the CompareWith="TimeUUIDType" flag?

Thanks,
Henrik


Solution

  • You must ensure your column family schema accepts UUID as key. Your code will work with a column family created as (using cassandra-cli):

    create column family MyColumnFamily
      with column_type = 'Standard'
      and comparator = 'AsciiType'
      and default_validation_class = 'BytesType'
      and key_validation_class = 'TimeUUIDType';
    

    To add values to this CF:

    import pycassa
    pool = pycassa.ConnectionPool('Keyspace1')
    cf = pycassa.ColumnFamily(pool, 'MyColumnFamily')
    cf.insert(uuid.uuid1(), {'column1': 'val1'})