【问题标题】:Why not display in "ORDER BY DESC" in Cassandra answer?为什么不在 Cassandra 答案的“ORDER BY DESC”中显示?
【发布时间】:2018-07-15 06:55:40
【问题描述】:

大家好! 我在 Cassandra 中创建键空间:

CREATE KEYSPACE 监控 WITH replication = { 'class': 'SimpleStrategy', “复制因子”:“1” }; CREATE TABLE monitoring.data ( 数字文字, 日期时间戳, last_day 时间戳静态, ids文本静态, 主键(数字,日期) ) 具有聚类顺序 BY (day DESC);

稍后我插入数据:

INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('12345678901', '2017-05-26', '2017-05-26', '["1","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('12345678901', '2017-10-26', '2017-10-26', '["1","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('12345678901', '2017-05-01', '2017-05-01', '["1","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('123456AA901', '2017-05-01', '2017-05-01', '["A","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('123456BB901', '2017-05-01', '2017-05-01', '["B","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('123456CC901', '2017-05-01', '2017-05-01', '["C","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('123456DD901', '2017-05-01', '2017-05-01', '["D","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('12345678901', '2017-05-23', '2017-05-23', '["1","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('12345678901', '2018-05-26', '2018-05-26', '["1","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('23456789012', '2017-04-01', '2017-04-01', '["6","2","11"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('34567890123', '2017-03-28', '2017-03-28', '["1","5","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('45678901234', '2017-04-03', '2017-04-03', '["12","2","3"] '); INSERT INTO monitoring.data (number, day, last_day, ids) VALUES ('56789012345', '2018-01-26', '2018-01-26', '["3","2","1"] ');

接下来我进行查询:

从monitoring.data中选择不同的数字,last_day,ids WHERE number in ('12345678901','56789012345','45678901234');

为什么 Cassandra 的答案是 12345678901 和 56789012345 之间的数字 45678901234?

号码 |最后一天 |身份证 ----------+--------------+--------- -------- 12345678901 | 2018-05-25 21:00:00+0000 | ["1","2","3"] 45678901234 | 2017-04-02 21:00:00+0000 | ["12","2","3"] 56789012345 | 2018-01-25 21:00:00+0000 | ["3","2","1"]

如何得到正确答案?复制因子在这种情况下很重要吗?稍后我将使用 LIMIT 10...

【问题讨论】:

  • 您的问题不清楚,您的预期答案是什么?
  • 我需要在 last_day (DESC) 之前订购
  • 最后一天还是一天?如果你想在 last_day 之前,那么这个应该是集群列。

标签: cassandra


【解决方案1】:

简单地说,number 是您的 partition 键,您只能在 clustering 键级别强制执行排序顺序。在分区键(如IN)上使用非等号子句进行过滤时,不能依赖结果的顺序。如果您要删除 IN 子句,您将按其散列分区键的顺序返回行。如果我对您的查询进行调整以在number 上使用token() 函数,则结果的顺序更有意义:

aploetz@cqlsh:stackoverflow> select distinct number,token(number),last_day,ids 
    FROM data;

number      | system.token(number) | last_day                        | ids
-------------+----------------------+---------------------------------+----------------
 123456BB901 | -7512323826965212800 | 2017-05-01 05:00:00.000000+0000 |  ["B","2","3"]
 123456DD901 | -5242683095224762575 | 2017-05-01 05:00:00.000000+0000 |  ["D","2","3"]
 23456789012 | -2843835925329100734 | 2017-04-01 05:00:00.000000+0000 | ["6","2","11"]
 123456CC901 |   970122905143661162 | 2017-05-01 05:00:00.000000+0000 |  ["C","2","3"]
 45678901234 |  2207499658550692669 | 2017-04-03 05:00:00.000000+0000 | ["12","2","3"]
 12345678901 |  3063849707784841171 | 2018-05-26 05:00:00.000000+0000 |  ["1","2","3"]
 123456AA901 |  4307148681570630627 | 2017-05-01 05:00:00.000000+0000 |  ["A","2","3"]
 56789012345 |  5304329977670805052 | 2018-01-26 06:00:00.000000+0000 |  ["3","2","1"]
 34567890123 |  6079361129233417517 | 2017-03-28 05:00:00.000000+0000 |  ["1","5","3"]

(9 rows)

底线是,如果没有分区键上的等于条件,您将无法强制执行排序顺序。

很遗憾,你真正想要做的并不是 Cassandra 的力量。为了得到你想要的答案,你必须在你期望的结果中寻找相似之处,然后设计一个查询表来支持它。但是,如果您只讨论 10 行,那么在应用程序端对结果进行排序可能会更容易。

【讨论】:

  • 可以发创建表的脚本吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 2012-03-07
  • 2020-03-09
  • 2020-02-19
相关资源
最近更新 更多