web-dev-qa-db-ja.com

cassandra CQL 3コマンドラインでuuidを自動生成する方法

Cassandraを学習するだけで、CQLを使用してUUIDを挿入する方法はありますか。

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');
44
Jacob

now() 関数を使用して、時間uuid(タイプ1 UUID)でできます。

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

Uidまたはtimeuuidで動作します。 「一意の保証」UID値を生成します。これにはタイムスタンプも含まれているため、時間でソートできます。

ただし、タイプ4 UUIDにはこのような関数はありません。


UPDATE:この注記は、Cassandraの古いバージョンに関するものです。新しいバージョンについては、以下を参照してください。

47
Richard

Cassandra 2.0.7 の時点で、ランダムなタイプ4 UUIDを生成するuuid()を使用できます。

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

実際には、blob変換関数-blobAsType()およびtypeAsBlob()を使用してそれを行う方法があります。あなたの場合、これは次のようになります。

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

これはtimeuuidblobに変換し、blobからuuidに変換します。

19
Zhivko Donev

UUIDは、衝突を避けるために使用される普遍的に一意のIDです。

Cassandra 2.0.7以降のバージョンには、パラメーターを受け取らず、INSERTまたはSETステートメントで使用するタイプ4 UUIDを生成するuuid()関数が含まれています。

now()などの関数でtimeuuid型を使用することもできます。タイプ1 UUIDを生成します。

タイプ1とタイプ4のUUIDの違いは、タイプ1 UUIDはタイムスタンプを使用して生成され、タイプ4は乱数を使用して生成されることです。

timeuuiduuidとして使用する場合は、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

12
Esteban Herrera