如果我在表格中有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."
如何才能获得一张巨大的桌子中最古老,最新的一排?
答案 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可以更自由地搜索。