Select Cassandra-未返回任何行

Select Cassandra-未返回任何行,select,indexing,cassandra,cql,Select,Indexing,Cassandra,Cql,这是我的桌子: CREATE TABLE mytable ( id uuid, day text, mytime timestamp, value text, status int, PRIMARY KEY ((id, day), mytime ) ) WITH CLUSTERING ORDER BY (mytime desc) ; 以下是索引: CREATE INDEX IF NOT EXISTS idx_s

这是我的桌子:

CREATE TABLE mytable
(
    id uuid,
    day     text,
    mytime      timestamp, 
    value       text,
    status      int,

PRIMARY KEY ((id, day), mytime )
)
WITH CLUSTERING ORDER BY (mytime desc)
;
以下是索引:

CREATE INDEX IF NOT EXISTS idx_status ON mytable (status);
运行此select语句时,我得到了预期的结果:

select * from mytable 
where id = 38403e1e-44b0-11e4-bd3d-005056a93afd 
AND day = '2014-10-29'
;
此查询的结果返回62行

如果我添加到此查询以包括索引列:

select * from mytable 
where id = 38403e1e-44b0-11e4-bd3d-005056a93afd 
AND day = '2014-10-29'
AND status = 5
;
返回零行。(有多条状态为5的记录)

如果我查询表…仅查找特定的索引值:

select * from mytable 
where status = 5
;
也返回零行

我不知所措。我不明白到底发生了什么

我在一个3节点群集上,复制级别为3。卡桑德拉2.1.3

在cassandra.yaml中,这可能是一个配置问题吗

或者…我的select语句有问题吗

谢谢你的帮助,谢谢

更新:

我在system.log文件中看到了这一点,ideas

ERROR [CompactionExecutor:1266] 2015-03-24 15:20:26,596 CassandraDaemon.java:167 - Exception in thread Thread[CompactionExecutor:1266,1,main]
java.lang.AssertionError: /cdata/cassandra/data/my_table-c5f756b5318532afb494483fa1828675/my_table.idx_status-ka-32-Data.db
    at org.apache.cassandra.io.sstable.SSTableReader.getApproximateKeyCount(SSTableReader.java:235) ~[apache-cassandra-2.1.3.jar:2.1.3]
    at org.apache.cassandra.db.compaction.CompactionTask.runMayThrow(CompactionTask.java:153) ~[apache-cassandra-2.1.3.jar:2.1.3]
    at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) ~[apache-cassandra-2.1.3.jar:2.1.3]
    at org.apache.cassandra.db.compaction.CompactionTask.executeInternal(CompactionTask.java:76) ~[apache-cassandra-2.1.3.jar:2.1.3]
    at org.apache.cassandra.db.compaction.AbstractCompactionTask.execute(AbstractCompactionTask.java:59) ~[apache-cassandra-2.1.3.jar:2.1.3]
    at org.apache.cassandra.db.compaction.CompactionManager$BackgroundCompactionTask.run(CompactionManager.java:240) ~[apache-cassandra-2.1.3.jar:2.1.3]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[na:1.7.0_51]
    at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.7.0_51]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.7.0_51]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.7.0_51]
    at java.lang.Thread.run(Unknown Source) [na:1.7.0_51]

我运行了上面的步骤,并且能够通过
status=5
查询行。我可以建议的一件事是,尝试重建索引。在命令提示符下尝试此操作:

nodetool rebuild_index mykeyspace mytable idx_status
否则,IMO解决这一问题的最佳方法是而不是带有二级索引的。如果你知道你必须支持一个查询(特别是使用大数据集),通过<代码>状态> />代码,那么我会认真考虑为它建立一个特定的、附加的“查询表”。
这将只支持按
状态
进行查询,或按
我的时间
排序的
状态
日期
进行查询。总之,我将尝试几种不同的主键定义,看看哪一种更适合您的查询模式。这样,您就可以避免同时使用性能不佳的二级索引。

您认为的
status
的“5”可能并没有真正作为
5
存储在数据库中。也许它是一个一边有空格字符的字符串。你是用cqlsh来尝试它的吗?我试过cqlsh,同样的结果。但是,当我在PROD中运行这些查询时,我确实得到了预期的结果。在我的开发环境中,我没有得到预期的结果。在DEV中,我插入了一个测试记录,然后再次执行select。我输入的记录被退回了。我想知道这张桌子是否需要修理?或者类似的东西?我不明白的是,你怎么能有62条记录都是相同的主键。我的理解是,当您使用主键插入新记录时,旧记录将被标记为已删除(墓碑)。尝试在cqlsh中打开跟踪,看看它显示了什么。由于“mytime”列上的列群集,返回了62行。该ID/天主键出现62次,在“mytime”列中都有不同的时间戳。同意。实际上,我有一个用于状态查询的辅助表。这就是我正在经历的过程。我一直在使用索引从主表中取出某些行……填充辅助表。然后将索引添加到草皮中。今天早些时候我确实重建了索引…最初不起作用…但是,我第二次重建了它们…它们似乎再次起作用。所以…我想我又回到生意上了。你对形势的分析很准确。谢谢布莱斯。
CREATE TABLE mytablebystatus (id uuid, day text, mytime timestamp, value text, status int, 
PRIMARY KEY ((status),day,mytime,id));