web-dev-qa-db-fra.com

Comment générer automatiquement uuid dans cassandra ligne de commande CQL 3

Pour apprendre Cassandra, existe-t-il un moyen d'insérer un UUID à l'aide de CQL, c'est-à-dire

create table stuff (uid uuid primary key, name varchar);
insert into stuff (name) values('my name'); // fails
insert into stuff (uid, name) values(1, 'my name'); // fails

Pouvez-vous faire quelque chose comme

insert into stuff (uid, name) values(nextuid(), 'my name');
44
Jacob

Vous pouvez avec des uuids temporels (type 1 UUID) en utilisant la fonction now () par ex.

insert into stuff (uid, name) values(now(), 'my name');

Fonctionne avec uid ou timeuuid. Il génère une valeur UID "unique garanti", qui contient également l'horodatage et est donc triable par le temps.

Il n'y a cependant pas une telle fonction pour les UUID de type 4.


MISE À JOUR: Cette note concerne les anciennes versions de Cassandra. Pour les versions plus récentes, voir ci-dessous.

47
Richard

Depuis Cassandra 2.0.7 vous pouvez simplement utiliser uuid (), qui génère un UUID de type 4 aléatoire:

INSERT INTO users(uid, name) VALUES(uuid(), 'my name');
85
lumi

En fait, il existe un moyen de le faire en utilisant les fonctions de conversion d'objets blob - blobAsType() et typeAsBlob(). Dans votre cas, cela devrait être:

insert into stuff (uid, name) values(blobAsUuid(timeuuidAsBlob(now())), 'my name');

Cela convertit timeuuid en blob et à partir de blob le convertit en uuid.

19
Zhivko Donev

Un UUID est un identifiant universel unique utilisé pour éviter les collisions.

Cassandra 2.0.7 et les versions ultérieures incluent la fonction uuid() qui ne prend aucun paramètre et génère un UUID de type 4 à utiliser dans les instructions INSERT ou SET.

Vous pouvez également utiliser un type timeuuid avec une fonction comme now(). Ils génèrent un UUID de type 1.

La différence entre les UUID de type 1 et de type 4 est qu'un UUID de type 1 est généré à l'aide d'un horodatage et un type 4 est généré à l'aide de nombres aléatoires.

Si vous souhaitez utiliser un timeuuid comme uuid, utilisez quelque chose comme blobAsUuid(timeuuidAsBlob(now())), car la valeur renvoyée par now() est garantie d'être unique.

Les références:

http://docs.datastax.com/en/cql/3.3/cql/cql_reference/uuid_type_r.html

http://docs.datastax.com/en/cql/3.3/cql/cql_reference/timeuuid_functions_r.html

http://docs.datastax.com/en/cql/3.3/cql/cql_reference/blob_r.html

12
Esteban Herrera