Pergunta

Heh, estou usando

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

para criar um TimeUUID para Cassandra, mas recebendo o erro

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

Não funciona com

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

qualquer.

Qual é a melhor maneira de criar um TimeUUID válido para usar com o sinalizador CompareWith="TimeUUIDType"?

Obrigado,
Henrique

Foi útil?

Solução

Você deve garantir que seu esquema de família de colunas aceite UUID como chave.Seu código funcionará com um grupo de colunas criado 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 adicionar valores a este CF:

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

Outras dicas

Parece que você está usando o uuid como chave da linha e não o nome da coluna.

O 'compare com:TempoUUIDType'atributo especifica que os nomes das colunas serão comparados com o uso do TimeUUIDType, ou seja, diz a Cassandra como classificar o colunas para operações de fatiamento

Você já pensou em usar algum dos clientes python de alto nível?Por exemplo. Negociado, Rapaz preguiçoso, Télefo ou Pycassa

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top