web-dev-qa-db-ja.com

cassandra cql selectで現在の日付を取得します

SQLでは、次のことができます。

select getdate(), getdate() - 7

現在の日付と現在の日付を返す-7日間。 Cassandra CQLで同じことを実現したいのですが、試しました:

select dateof(now())

しかし、それはうまくいきません。挿入時にのみ機能し、選択時には機能しません。どうすれば同じことができますか?任意の助けいただければ幸いです。

13
Hitesh
select dateof(now())

それ自体では、あなたは正しいです、それは機能しません。しかし、行が1つしかないことがわかっているテーブルがある場合(system.localなど):

aploetz@cqlsh:stackoverflow> SELECT dateof(now()) FROM system.local ;

 dateof(now())
--------------------------
 2015-03-26 03:18:39-0500

(1 rows)

残念ながら、Cassandra CQLには(まだ? CASSANDRA-5505 )は算術演算のサポートが含まれていません。日付の算術演算はもちろんです。そのため、その値から7日を引くと、アプリケーションレベルで行う必要があります。

31
Aaron

1つの行、多くの行、またはまったくない場合でも、読み取りアクセス権を持つ任意のテーブルで機能する別の可能なソリューション:

_SELECT toTimestamp(now()) AS now, count(*) FROM any_table WHERE partition_key=xyz;
_

ここでの違いは、集計関数COUNT(*)は、結果セットに常に1行のみが含まれることを保証することです。

明らかに、_any_table_を読み取りアクセス権を持つテーブルに置き換え、WHERE句をテーブルパーティションキーを完全に指定するものに置き換えます。この場合も、パーティションキーの指定された値と一致する実際の行は必要ないため、適切なタイプの値をハードコードできます。

余談

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

0
Ian Goldby