Как автоматически генерировать uuid в командной строке cassandra CQL 3
Просто изучая cassandra, есть способ вставить 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');
Ответы
Ответ 1
Вы можете со временем uuids (тип UUID) использовать функцию now(), например,
insert into stuff (uid, name) values(now(), 'my name');
Для этого вам нужно будет изменить тип uid на timeuuid.
Не существует такой функции для UUID типа 4.
ОБНОВЛЕНИЕ: Этот ответ относится к более старым версиям Cassandra. Для более новых версий см. Ниже.
Ответ 2
В Cassandra 2.0.7 вы можете просто использовать uuid().
INSERT INTO users(uid, name) VALUES(uuid(), 'my name');
Ответ 3
На самом деле есть способ сделать это, используя функции преобразования blob - blobAsType и typeAsBlob. В вашем случае это должно быть:
insert into stuff (uid, name) values(blobAsUuid(timeuuidAsBlob(now())), 'my name');
Это конвертирует timeuuid в блок и из блока преобразует его в uuid.
Ответ 4
UUID - универсальный уникальный идентификатор, используемый для предотвращения столкновений.
Cassandra 2.0.7 и более поздние версии включают функцию uuid()
, которая не принимает никаких параметров и генерирует UUID типа 4 для использования в операторах INSERT
или SET
.
Вы также можете использовать тип timeuuid
с такой функцией, как now()
. Они генерируют UUID типа 1.
Разница между UUID типа 1 и Type 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