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');
now() 関数を使用して、時間uuid(タイプ1 UUID)でできます。
insert into stuff (uid, name) values(now(), 'my name');
Uidまたはtimeuuidで動作します。 「一意の保証」UID値を生成します。これにはタイムスタンプも含まれているため、時間でソートできます。
ただし、タイプ4 UUIDにはこのような関数はありません。
UPDATE:この注記は、Cassandraの古いバージョンに関するものです。新しいバージョンについては、以下を参照してください。
Cassandra 2.0.7 の時点で、ランダムなタイプ4 UUIDを生成するuuid()を使用できます。
INSERT INTO users(uid, name) VALUES(uuid(), 'my name');
実際には、blob変換関数-blobAsType()
およびtypeAsBlob()
を使用してそれを行う方法があります。あなたの場合、これは次のようになります。
insert into stuff (uid, name) values(blobAsUuid(timeuuidAsBlob(now())), 'my name');
これはtimeuuid
をblob
に変換し、blob
からuuid
に変換します。
UUIDは、衝突を避けるために使用される普遍的に一意のIDです。
Cassandra 2.0.7以降のバージョンには、パラメーターを受け取らず、INSERT
またはSET
ステートメントで使用するタイプ4 UUIDを生成するuuid()
関数が含まれています。
now()
などの関数でtimeuuid
型を使用することもできます。タイプ1 UUIDを生成します。
タイプ1とタイプ4のUUIDの違いは、タイプ1 UUIDはタイムスタンプを使用して生成され、タイプ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