从 cassandra 获取最后 100 行 table
Get the last 100 rows from cassandra table
我在 cassandra 中有一个 table 现在我不能 select table 中的最后 200 行。
聚类 order by 子句应该在磁盘上强制排序。
CREATE TABLE t1(id int ,
event text,
receivetime timestamp ,
PRIMARY KEY (event, id)
) WITH CLUSTERING ORDER BY (id DESC)
;
输出未按 id 排序:
event | id | receivetime
---------+----+---------------------------------
event1 | 1 | 2021-07-12 08:11:57.702000+0000
event7 | 7 | 2021-05-22 05:30:00.000000+0000
event5 | 5 | 2021-05-25 05:30:00.000000+0000
event9 | 9 | 2021-05-22 05:30:00.000000+0000
event2 | 2 | 2021-05-21 05:30:00.000000+0000
event10 | 10 | 2021-05-23 05:30:00.000000+0000
event4 | 4 | 2021-05-24 05:30:00.000000+0000
event6 | 6 | 2021-05-27 05:30:00.000000+0000
event3 | 3 | 2021-05-22 05:30:00.000000+0000
event8 | 8 | 2021-05-21 05:30:00.000000+0000
我该如何克服这个问题?
谢谢
聚类顺序的顺序是单个分区键值内的顺序,例如event1 的所有行都将按 event1 的顺序排列。不是全局排序。
从您的结果我们可以看出您选择了多个分区 - 这就是为什么您没有看到预期顺序的原因。
https://community.datastax.com/questions/11983/ 上有人问了同样的问题,所以我在这里重新发布我的答案。
分区中的行是根据集群列的顺序而不是分区键排序的。
在您的例子中,table 的主键定义为:
PRIMARY KEY (event, id)
这意味着每个分区键可以有一行或多行,每一行由 id 列标识。由于每个分区只有一行,所以排序顺序不明显。但是,如果每个分区中有多行,您将能够看到它们将被排序。例如:
event | id | receivetime
---------+----+---------------------------------
event1 | 7 | 2021-05-22 05:30:00.000000+0000
event1 | 5 | 2021-05-25 05:30:00.000000+0000
event1 | 1 | 2021-07-12 08:11:57.702000+0000
在上面的示例中,分区 event1
有 3 行按 ID 列倒序排序。
此外,运行 无限查询(没有 WHERE
子句过滤器)在 Cassandra 中是一种反模式,因为它需要完整的 table 扫描。如果你考虑一个有 500 个节点的集群,一个无界查询必须请求所有 500 个节点的所有分区(记录)到 return 结果。它不会表现良好,也不会扩展。干杯!
我在 cassandra 中有一个 table 现在我不能 select table 中的最后 200 行。 聚类 order by 子句应该在磁盘上强制排序。
CREATE TABLE t1(id int ,
event text,
receivetime timestamp ,
PRIMARY KEY (event, id)
) WITH CLUSTERING ORDER BY (id DESC)
;
输出未按 id 排序:
event | id | receivetime
---------+----+---------------------------------
event1 | 1 | 2021-07-12 08:11:57.702000+0000
event7 | 7 | 2021-05-22 05:30:00.000000+0000
event5 | 5 | 2021-05-25 05:30:00.000000+0000
event9 | 9 | 2021-05-22 05:30:00.000000+0000
event2 | 2 | 2021-05-21 05:30:00.000000+0000
event10 | 10 | 2021-05-23 05:30:00.000000+0000
event4 | 4 | 2021-05-24 05:30:00.000000+0000
event6 | 6 | 2021-05-27 05:30:00.000000+0000
event3 | 3 | 2021-05-22 05:30:00.000000+0000
event8 | 8 | 2021-05-21 05:30:00.000000+0000
我该如何克服这个问题? 谢谢
聚类顺序的顺序是单个分区键值内的顺序,例如event1 的所有行都将按 event1 的顺序排列。不是全局排序。
从您的结果我们可以看出您选择了多个分区 - 这就是为什么您没有看到预期顺序的原因。
https://community.datastax.com/questions/11983/ 上有人问了同样的问题,所以我在这里重新发布我的答案。
分区中的行是根据集群列的顺序而不是分区键排序的。
在您的例子中,table 的主键定义为:
PRIMARY KEY (event, id)
这意味着每个分区键可以有一行或多行,每一行由 id 列标识。由于每个分区只有一行,所以排序顺序不明显。但是,如果每个分区中有多行,您将能够看到它们将被排序。例如:
event | id | receivetime
---------+----+---------------------------------
event1 | 7 | 2021-05-22 05:30:00.000000+0000
event1 | 5 | 2021-05-25 05:30:00.000000+0000
event1 | 1 | 2021-07-12 08:11:57.702000+0000
在上面的示例中,分区 event1
有 3 行按 ID 列倒序排序。
此外,运行 无限查询(没有 WHERE
子句过滤器)在 Cassandra 中是一种反模式,因为它需要完整的 table 扫描。如果你考虑一个有 500 个节点的集群,一个无界查询必须请求所有 500 个节点的所有分区(记录)到 return 结果。它不会表现良好,也不会扩展。干杯!