Как автоматически генерировать uuid в командной строке Cassandra CQL 3

Просто изучая Кассандру, есть ли способ вставить UUID с помощью CQL, т.е.

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

Вы можете сделать что-то вроде

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

4 ответа

Решение

Вы можете использовать time uuids (тип 1 UUID) с помощью функции now(), например:

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

Работает с UID или TimeUUID. Он генерирует "гарантированное уникальное" значение UID, которое также содержит метку времени, поэтому сортируется по времени.

Однако для UUID типа 4 такой функции не существует.


ОБНОВЛЕНИЕ: Эта заметка относится к более старым версиям Кассандры. Для более новых версий, см. Ниже.

Начиная с Cassandra 2.0.7 вы можете просто использовать uuid(), который генерирует UUID случайного типа 4:

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

На самом деле есть способ сделать это, используя функции преобразования BLOB-объектов - blobAsType и typeAsBlob. В вашем случае это должно быть:

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

Это конвертировать timeuuid в blod, а из blod конвертировать в uuid.

UUID - это универсальный уникальный идентификатор, используемый для предотвращения коллизий.

Cassandra 2.0.7 и более поздние версии включают в себя uuid() функция, которая не принимает параметров и генерирует UUID типа 4 для использования в INSERT или же SET заявления.

Вы также можете использовать timeuuid введите с функцией, как now(), Они генерируют UUID типа 1.

Разница между UUID типа 1 и типа 4 заключается в том, что UUID типа 1 генерируется с использованием временной метки, а тип 4 генерируется с использованием случайных чисел.

Если вы хотите использовать timeuuid как uuid использовать что-то вроде blobAsUuid(timeuuidAsBlob(now())), поскольку значение, возвращаемое now() гарантированно будет уникальным.

Рекомендации:

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

Другие вопросы по тегам