是否可以仅使用时间戳PK字段和w/o ALLOW FILTERING和TTL选项删除Cassandra中早于“x”的数据?

是否可以仅使用时间戳PK字段和w/o ALLOW FILTERING和TTL选项删除Cassandra中早于“x”的数据?,cassandra,Cassandra,标题说明一切。我有一个测试 当试图 select * from messagesbytimestampTEST where timestamp > '2021-01-03' and timestamp < '2021-01-04' ; 我在这里看到的是这个示例,但我假设它只是cql查询的一部分: SELECT * FROM myTable WHERE t > maxTimeuuid('2013-01-01 00:05+0000') AND t < minTi

标题说明一切。我有一个测试

当试图

select * from messagesbytimestampTEST where timestamp > '2021-01-03' and timestamp < '2021-01-04' ;
我在这里看到的是这个示例,但我假设它只是cql查询的一部分:

SELECT * FROM myTable
   WHERE t > maxTimeuuid('2013-01-01 00:05+0000')
   AND t < minTimeuuid('2013-02-02 10:00+0000')

我知道上面的代码与timeuuid有关,但我也尝试过,它会产生相同的错误。

如果不允许过滤,在CQL中是不可能的。主要原因是,在表中,主键与分区键相同,为了完成查询,需要扫描所有服务器上的数据。发生这种情况的原因是分区键没有排序——该值是散列的,用于选择存储它的服务器。所以CurrentTime-1秒将在一台服务器上,CurrentTime-10秒将在另一台服务器上,以此类推

通常,对于此类查询,人们使用一些外部工具,如DSBulk或Spark with Spark Cassandra Connector。您可以参考我在该主题上提供的以下答案:

InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING"
SELECT * FROM myTable
   WHERE t > maxTimeuuid('2013-01-01 00:05+0000')
   AND t < minTimeuuid('2013-02-02 10:00+0000')