我在Cassandra有一个表,其中存储了房客最后更新的详细信息。有一个更新用法的时间戳字段。我需要找到每个房客的最新细节。因此,将表结构视为:
现在,我需要这样的输出:
我写了这样的问题:
aQueries = ['t1','t2','t3'];
const query = `SELECT *
FROM system_log_stats.keyspaces_sizes
WHERE keyspace_name IN ? ORDER BY timestamp_sec DESC LIMIT 1`;
const res = await client.execute(query, [aQueries], { prepare: true});
但是上面的查询只返回1个结果。
请注意,我必须使用where in子句,因为我不想为所有租户提取,而只为选定的租户提取。
2条答案
按热度按时间bkkx9g8r1#
干净的解决方案是在一个循环中多次使用查询。您可以在循环中查询以下租户id列表
此解决方案的优点:
在cassandra中,使用“in子句”查询是反模式的,因为您试图在同一查询中访问多个分区。在某些情况下,这可能会导致超时。
它不复杂地解决了问题。
ljsrvy3e2#
在Cassandra,
LIMIT 1
将只返回整个结果集中1行的结果。Cassandra还提供
PER PARTITION LIMIT 1
,它从结果集中的每个分区返回1行。https://cassandra.apache.org/doc/latest/cql/dml.html#limiting-结果
在你的例子中,你可以做一些
(虽然我不确定order by是否可以同时使用。)