在cassandra中选择id!=无效的

在cassandra中选择id!=无效的,cassandra,cql,Cassandra,Cql,如何在cassandra中查询!=空列 Select * from tableA where id != null; Select * from tableA where name != null; 然后我想存储这些值并将它们插入到不同的表中。我认为这在Cassandra中是不可能的。首先,Cassandra CQL不支持在WHERE子句中使用NOT或NOT equal运算符。其次,WHERE子句只能包含主键列,主键列不允许插入空值。但是我不确定二级索引,所以我运行了这个快速测试: creat

如何在cassandra中查询!=空列

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

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

我认为这在Cassandra中是不可能的。首先,Cassandra CQL不支持在WHERE子句中使用NOT或NOT equal运算符。其次,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);
我现在有一个表和两行(一行为空数据):

然后我尝试在name上创建一个二级索引,我知道它包含空值

CREATE INDEX nullTestIdx ON nullTest(name);
它让我去做。现在,我将对该索引运行一个查询

SELECT * FROM nullTest WHERE name=null;
Bad Request: Unsupported null value for indexed column name
同样,这是在不能查询NOTNULL的前提下完成的,如果您甚至不能查询实际可能为null的列值

所以,我认为这是不可能的。此外,如果主键中可能存在空值,则可能需要重新评估数据模型。同样,我知道OP的问题是查询数据不为null的位置。但正如我之前提到的,卡桑德拉CQL没有“不”或!=接线员,所以这将是一个问题

另一种选择是插入空字符串,而不是空字符串。然后就可以查询空字符串了。但这仍然无法克服主键字段中存在null的基本设计缺陷。如果您有一个复合主键,并且只有它的一部分(集群列)可能是空的(当然不是分区键的一部分)。但是您仍然会遇到无法查询“notempty”(而不是notnull)行的问题

注意:此处插入空值仅用于演示目的。这是您应该尽最大努力避免的事情,因为插入空列值将创建一个墓碑。同样,插入大量空值将创建大量墓碑。

1)从测试中选择*

name             | id | address
------------------+----+------------------
    bangalore |  3 |       ramyam_lab
    bangalore |  4 | bangalore_ramyam
    bangalore |  5 |        jasgdjgkj
       prasad | 11 |             null
       prasad | 12 |             null
        india |  6 |          karnata
        india |  7 |          karnata
ramyam-bangalore |  3 |        jasgdjgkj
ramyam-bangalore |  5 |        jasgdjgkj
2) cassandra不支持空值选择。它显示空值以供我们理解


3) 要处理空值,请使用另一个字符串,如“notavailable”、“null”,然后我们可以选择data

,其中id为null
null
是数据库中的一个特殊值,具有传染性。使用空值执行的任何操作都会被“感染”,并且结果会变为空值。您不能执行
null=null
,必须使用特殊的
is null
语法。将从表A中选择*,其中id=null<代码>其中id也不为空。从名称不为空的表A中选择*;错误的请求:第1:42行输入“是”时没有可行的替代方案这在cassandra中,而不是MYSQL中只是一个提醒我认为这已经过时了。。。添加了对
NULL
值的支持。@JeffWidman该票据具有误导性。Cassandra 4.0(beta版)不支持插入空值,也不支持not equals运算符。啊,我错过了关于该票证的最后一条评论:该票证从其原始范围收缩,变成了仅支持在单元格上执行删除操作时向上插入空值。目前没有对索引空值的select支持,并且考虑到Cassandra的设计,这被认为是一个困难/禁止的问题。
name             | id | address
------------------+----+------------------
    bangalore |  3 |       ramyam_lab
    bangalore |  4 | bangalore_ramyam
    bangalore |  5 |        jasgdjgkj
       prasad | 11 |             null
       prasad | 12 |             null
        india |  6 |          karnata
        india |  7 |          karnata
ramyam-bangalore |  3 |        jasgdjgkj
ramyam-bangalore |  5 |        jasgdjgkj