Domanda

heh, Sto usando

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

per creare un timeuuid per Cassandra, ma ottenere l'errore

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

Non funziona con

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

entrambi.

Qual è il modo migliore per creare un timeuuid valido da utilizzare con il flag di confronto="timeuuidtype"?

Grazie,
Henrik

È stato utile?

Soluzione

È necessario assicurarsi che il tuo schema familiare della colonna accetti UUID come chiave.Il tuo codice funzionerà con una famiglia di colonne creata come (usando Cassandra-CLI):

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

Per aggiungere valori a questo cf:

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

Altri suggerimenti

Sembra che tu stia usando l'UUID come tasto ROW e non il nome della colonna.

The ' Confronta_with: Timeuuidtype ' Attributo Specifica che i nomi delle colonne saranno confrontati con l'utilizzo del timeuuidtype, cioè Tells Cassandra Come ordinare le colonne per le operazioni di affettatura

Hai pensato di utilizzare uno dei clienti Python di alto livello?Per esempio. TradeDy , ragazzo pigro , Telephus o Pyassa

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top