gpt4 book ai didi

cassandra - 在Cassandra中进行选择,其中id!= null

转载 作者:行者123 更新时间:2023-12-03 20:30:26 27 4
gpt4 key购买 nike

如何在cassandra中查询!=空列。

Select * from tableA where id != null;
Select * from tableA where name != null;


然后,我想存储这些值并将它们插入到不同的表中。

最佳答案

我认为Cassandra不可能做到这一点。首先,Cassandra CQL不支持在WHERE子句中使用NOT或不等于运算符。其次,您的WHERE子句只能包含主键列,并且主键列将不允许插入空值。我不确定二级索引,所以我运行了这个快速测试:

create table nullTest (id text PRIMARY KEY, name text);
INSERT INTO nullTest (id,name) VALUES ('1','bob');
INSERT INTO nullTest (id,name) VALUES ('2',null);


我现在有一个表和两行(其中一行包含空数据):

SELECT * FROM nullTest;

id | name
----+------
2 | null
1 | bob

(2 rows)


然后,我尝试在名称上创建一个辅助索引,该索引包含空值。

CREATE INDEX nullTestIdx ON nullTest(name);


它让我做到了。现在,我将对该索引运行查询。

SELECT * FROM nullTest WHERE name=null;
Bad Request: Unsupported null value for indexed column name


再一次,这是在不查询不为null的前提下完成的,即使您甚至无法查询实际上可能为null的列值也是如此。

因此,我认为这无法完成。另外,如果主键中可能有空值,那么您可能需要重新评估数据模型。同样,我知道OP的问题是关于查询数据不为null的地方。但是正如我之前提到的,Cassandra CQL没有NOT或!=运算符,所以那将是一个问题。

另一种选择是插入一个空字符串而不是一个null。这样便可以查询一个空字符串。但这仍不能使您克服主键字段中包含null的基本设计缺陷。也许如果您有一个复合主键,并且只有一部分(聚类列)有可能为空(肯定不是分区键的一部分)。但是您仍然会遇到无法查询“非空”行(而不是非空)的问题。

注意:此处插入空值仅出于演示目的。您应该尽力避免这种情况,因为插入空列值将创建一个逻辑删除。同样,插入大量的空值将创建大量的逻辑删除。

关于cassandra - 在Cassandra中进行选择,其中id!= null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com