web-dev-qa-db-ja.com

Cassandra cql:テーブルから最後のn行を選択する方法

行がテーブルに追加されていることを確認したい。次の表のlast n行を示すcqlステートメントはどれですか?

以下の表の説明:

cqlsh:timeseries> describe table option_data;

CREATE TABLE option_data (
  ts bigint,
  id text,
  strike decimal,
  callask decimal,
  callbid decimal,
  maturity timestamp,
  putask decimal,
  putbid decimal,
  PRIMARY KEY ((ts), id, strike)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.100000 AND
  gc_grace_seconds=864000 AND
  index_interval=128 AND
  read_repair_chance=0.000000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='99.0PERCENTILE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

cqlsh:timeseries>
11
Ivan

最後のnを「何によって」指定していません。

IDごとの最後のNを取得するには:

SELECT * FROM option_data WHERE ts=1 ORDER BY id DESC LIMIT N;

ORDER BY句は、複合主キーの2番目の列にのみ適用できます。時間でクエリを実行する必要がある場合は、データモデルについてもう少し考える必要があります。

クエリが最も頻繁に「最後のN」である場合は、次のようなものを書くことを検討してください。

CREATE TABLE time_series (
    id text,
    t timeuuid,
    data text,
    PRIMARY KEY (id, t)
) WITH CLUSTERING ORDER BY (t DESC)

...ここで、「id」は時系列IDです。 CLUSTERING ORDERは、timeuuid 't'の順序を逆にして、クエリに対してセルが自然な順序で格納されるようにします。

これにより、次のように最後の5つのイベントが取得されます。

SELECT * FROM time_series WHERE id='stream id' LIMIT 5;

Cassandraには、時系列に関する多くの情報があります。その問題についてのより最近の記事のいくつかを読むことをお勧めします。これは簡潔で比較的最近です: http://www.datastax.com/documentation/tutorials/Time_Series.pdf

15
Adam Holmberg