Pregunta

jeh, Estoy usando

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

para crear un TIMEUUID para Cassandra, pero obtener el error

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

no funciona con

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

tampoco.

¿Cuál es la mejor manera de crear un tiempo válido para usar con la bandera CompareWith="timuytype"?

gracias,
Henrik

¿Fue útil?

Solución

Debe asegurarse de que el esquema familiar de su columna acepte UUID como clave.Su código funcionará con una familia de columnas 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'})

Otros consejos

Parece que está utilizando el UUID como la tecla de fila y no el nombre de la columna.

El atributo ' compare_with: timuytype ' especifica que los nombres de las columnas se compararán con el uso de TIMEUUUIDTYPE, es decir, le dice a Cassandra cómo ordenar las columnas para las operaciones de rebanado

¿Ha considerado usando alguno de los clientes de Python de alto nivel?P.ej. tradedgy , niño perezoso , telephus o pycassa

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top