Generar uuid para Cassandra en Python
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
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