Générer l'UUID pour Cassandra en Python
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
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