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

juste apprendre cassandra, y a-t-il un moyen d'insérer un UUID en utilisant 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');
36
demandé sur Jacob 2013-07-30 15:05:37

4 réponses

Vous pouvez avec le temps uuids (type 1 UUID) en utilisant le now () par exemple,

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'estampille de temps est donc sortable par le temps.

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


mise à jour: cette note concerne les anciennes versions de Cassandra. Pour les versions plus récentes, voir ci-dessous.

39
répondu Richard 2018-05-09 19:16:39

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');
77
répondu lumi 2018-05-09 19:15:03

en fait, il y a un moyen de le faire en utilisant les fonctions de conversion blob - blobAsType et typeAsBlob. Dans votre cas, cela devrait être:

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

ici convertissez timeuuid en blod et de blod convertissez-le en uuid.

19
répondu Zhivko Donev 2014-04-02 10:14:19

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

Cassandra 2.0.7 et les versions suivantes incluent le uuid() fonction qui ne prend aucun paramètre et génère un UUID de Type 4 à utiliser dans INSERT ou SET consolidés.

vous pouvez aussi utiliser un timeuuid tapez 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'une horodatage et qu'un UUID de Type 4 est généré à l'aide de nombres aléatoires.

si vous voulez utiliser un timeuuiduuid utilisez quelque chose comme blobAsUuid(timeuuidAsBlob(now())), puisque la valeur retournée par now() est garantie unique.

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

11
répondu Esteban Herrera 2015-08-13 05:02:22