web-dev-qa-db-ja.com

コマンドラインの使用中にCQLで現在のタイムスタンプを取得する方法は?

コマンドラインからCQLテーブルに挿入しようとしています。すべてを挿入できます。しかし、タイムスタンプ列がある場合、コマンドラインからタイムスタンプ列に挿入するにはどうすればよいですか?基本的に、CQLテーブルに挿入するたびに現在のタイムスタンプを挿入します-

現在、以下のCQLテーブルに挿入するたびにタイムスタンプをハードコーディングしています-

CREATE TABLE TEST (ID TEXT, NAME TEXT, VALUE TEXT, LAST_MODIFIED_DATE TIMESTAMP, PRIMARY KEY (ID));

INSERT INTO TEST (ID, NAME, VALUE, LAST_MODIFIED_DATE) VALUES ('1', 'elephant',  'SOME_VALUE', 1382655211694);

CQLのいくつかの事前定義された関数を使用して現在のタイムスタンプを取得する方法はありますか?そのため、上記のテーブルに挿入するときに、そのメソッドを使用して現在のタイムスタンプを取得してから上記のテーブルに挿入できますか?

52
user2467545

Timeuuid関数now()およびdateof()(またはCassandraの以降のバージョン、toTimestamp())を使用できます。

INSERT INTO TEST (ID, NAME, VALUE, LAST_MODIFIED_DATE)
                  VALUES ('2', 'elephant',  'SOME_VALUE', dateof(now()));

now関数は引数を取らず、新しい一意のtimeuuidを生成します(それを使用するステートメントが実行される時点)。 dateOf関数はtimeuuid引数を取り、埋め込まれたタイムスタンプを抽出します。 ( timeuuid関数 に関するCQLドキュメントから引用)。

Cassandra> = 2.2.0-rc2

dateof()はCassandra 2.2.0-rc2で廃止されました。それ以降のバージョンでは、次のように使用をtoTimestamp()に置き換える必要があります。

INSERT INTO TEST (ID, NAME, VALUE, LAST_MODIFIED_DATE)
                  VALUES ('2', 'elephant',  'SOME_VALUE', toTimestamp(now()));
102
lorcan

cassandraの新しいバージョンでは、toTimestamp(now())を使用でき、関数dateof非推奨であることに注意してください。

例えば

insert into dummy(id, name, size, create_date) values (1, 'Eric', 12, toTimestamp(now()));
15
Eric Wang