Question

Heh, j'utilise

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

pour créer un TimeUUID pour Cassandra, mais obtenir l'erreur

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

Ça ne marche pas avec

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

soit.

Quelle est la meilleure façon de créer un TimeUUID valide à utiliser avec l'indicateur CompareWith="TimeUUIDType" ?

Merci,
Henrik

Était-ce utile?

La solution

Vous devez vous assurer que le schéma de votre famille de colonnes accepte l'UUID comme clé.Votre code fonctionnera avec une famille de colonnes créée comme (à l'aide de cassandra-cli) :

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

Pour ajouter des valeurs à ce CF :

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

Autres conseils

On dirait que vous utilisez l'uuid comme clé de ligne et non comme nom de colonne.

Le 'comparer avec:HeureUUIDType' spécifie que les noms de colonnes seront comparés à l'aide du TimeUUIDType, c'est-à-dire qu'il dit à Cassandra comment trier les Colonnes pour les opérations de tranchage

Avez-vous envisagé d'utiliser l'un des clients Python de haut niveau ?Par exemple. Tradedgy, Garçon paresseux, Télèphe ou Pycassa

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top