2014-10-02 97 views
7

我想验证行是否被添加到表中。什么cql语句将显示最后从下表中的n行?Cassandra cql:如何从表中选择最后n行

下表说明:

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> 

回答

12

您没有指定最后N “的是什么”。

要获得的最后N个每个ID:

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

ORDER BY子句只能在化合物主键被施加到第二列中。如果您需要按时间查询,则需要再多考虑一下数据模型。

如果查询是最常见的“最后N”,你可能会考虑写这样的事情:

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

...其中“身份证”是时间序列编号。 CLUSTERING ORDER颠倒了timeuuid't'的顺序,导致单元格按自然顺序存储以供查询。

有了这个,你会得到最后的五个事件如下:

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

有大量的信息在那里对Cassandra的时间序列。我建议阅读一些关于此事的最新文章。这是简洁和相对近期的: http://www.datastax.com/documentation/tutorials/Time_Series.pdf

+1

亚当谢谢你。 – Ivan 2014-10-03 17:08:56