正如标题所说,我试图查询所有没有存储值的数据。我已经搜索了一段时间,但我找到的唯一允许的操作是CONTAINS
,这不符合我的需求。
考虑下表:
CREATE TABLE environment(
id uuid,
name varchar,
message text,
public Boolean,
participants set<varchar>,
PRIMARY KEY (id)
)
如何获取表中所有有空集的条目?例如,参与者={}或为null?
不幸的是,你真的做不到。Cassandra在设计上让这样的查询变得困难,因为如果不进行完整的表扫描(扫描每个节点(,就不可能做到这一点。这就是为什么Cassandra数据建模的很大一部分是理解查询该表的所有方式,并构建它来支持这些查询。
您必须处理的另一个问题是(一般来说(Cassandra不允许通过null
s进行过滤。同样,这是一个设计选择。。。查询存在的数据要比查询不存在的数据容易得多。尽管如此,在使用轻量级事务进行编写时,有一些方法可以绕过这一点(使用IF
子句(。
如果你提前知道所有的id
,你可以写一些东西来迭代它们,SELECT
,并在应用程序端检查null。尽管这种方法会很慢(但不会给集群带来压力(。也许更好的方法是使用像ApacheSpark这样的分布式OLAP层。这仍然不会很快,但这可能是处理这种情况的最佳方式。