获取最新,最新的一排表

时间:2016-02-25 23:43:56

标签: cassandra

如果我在表格中有log_date(格式:2015-02-20 00:00:00 + 0000)列,我无法弄清楚如何知道最大和最新的巨大表格行。

我尝试了以下变体:

select account_id, log_date FROM my.table where log_date<'2013-03-20 00:00' limit 1 allow filtering;
ReadTimeout: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}

select account_id, log_date from my.table order by log_date desc limit 1;
InvalidRequest: code=2200 [Invalid query] message="ORDER BY is only supported when the partition key is restricted by an EQ or an IN."

如何才能获得一张巨大的桌子中最古老,最新的一排?

1 个答案:

答案 0 :(得分:1)

如果列系列的主键是(account_id),则按log_date排序以获取最新帐户将完全不起作用。

在CQL中,您只能通过在指定的分区键下对群集进行群集来进行排序。因此,如果您的主键是(account_id,logdate),则表示account_id是分区键,log_date是群集键。您只能在标准中指定account_id时执行订单:

select * from riskless.account_data_pg where account_id = 1 order by log_date;

简而言之,如果您希望列系列存储时间序列数据,则需要仔细设计主键,主键的设计决定了如何&amp;你能订购什么。

另一种选择是将Solr或Elasticsearch与cassandra一起使用,对列族中的行进行索引,使用Solr或Elasticsearch搜索API可以更自由地搜索。