Как автоматически генерировать 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