2010-07-13 14 views
10

Je, estoy usandoGenerar UUID para Cassandra en Python

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

para crear un TimeUUID de Cassandra, pero conseguir el error

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

No hace trabajar con

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

cualquiera.

¿Cuál es la mejor manera de crear un TimeUUID válido para utilizar con el indicador CompareWith = "TimeUUIDType"?

Gracias,
Henrik

Respuesta

4

Debe asegurarse de que su esquema de familia de columnas acepta UUID como clave. Su código funcionará con una familia columna creada como (usando cassandra-CLI):

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

Para agregar valores a este CF:

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

Parece que está usando el UUID como la clave de fila y no el nombre de la columna.

El 'compare_with: TimeUUIDType' atributo especifica que los nombres de las columnas serán comparados con el uso de la TimeUUIDType, es decir que tells Cassandra how to sort the columns for slicing operations

¿Usted ha considerado el uso de cualquiera de los clientes de pitón de alto nivel? P.ej. Tradedgy, Lazy Boy, Telephus o Pycassa

+0

que debería haber mencionado que estoy pycassa USIG, pero parece que tengo que crear los timeuuids yo mismo. –

+0

mismo error. tal vez es un problema con pycassa –

+1

gracias de nuevo. y para su mensaje icq también :) –