如何编写查询以查找表中具有空/空字段的所有记录?我尝试过尝试下面的查询,但它没有返回任何内容。
SELECT * FROM book WHERE author = 'null';
答案 0 :(得分:27)
null
字段在Cassandra中不存在,除非您自己添加它们。
您可能正在考虑CQL数据模型,它隐藏了某些实现细节,以便拥有更易理解的数据模型。 Cassandra是稀疏的,这意味着实际上只存储了所使用的数据。您可以通过CQL向Cassandra添加一些测试数据来实现这一点。
cqlsh> CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 } ;
cqlsh> use test ;
cqlsh:test> CREATE TABLE foo (name text, age int, pet text, primary key (name)) ;
cqlsh:test> insert into foo (name, age, pet) values ('yves', 81, 'german shepherd') ;
cqlsh:test> insert into foo (name, pet) values ('coco', 'ferret') ;
cqlsh:test> SELECT * FROM foo ;
name | age | pet
-----+-----+------------------
coco | null | ferret
yves | 81 | german shepherd
所以,即使看起来存在空值,实际值也不存在 - CQL向您显示null
因为这更直观,更有意义。
如果您查看Thrift方面的表格,您可以看到该表格中没有包含coco
年龄的值。
$ bin/cassandra-cli
[default@unknown] use test;
[default@test] list foo;
RowKey: coco
=> (name=, value=, timestamp=1389137986090000)
=> (name=age, value=00000083, timestamp=1389137986090000)
-------------------
RowKey: yves
=> (name=, value=, timestamp=1389137973402000)
=> (name=age, value=00000051, timestamp=1389137973402000)
=> (name=pet, value=6765726d616e207368657068657264, timestamp=1389137973402000)
在这里,您可以清楚地看到yves
有两列:age
和pet
,而coco
只有一列:age
。
答案 1 :(得分:3)
据我所知,您无法使用NULL
执行此操作。
作为替代方案,您可以使用不同的空值,例如空字符串:''
在这种情况下,您可以选择所有具有空作者的书籍(假设作者列已正确编入索引):
SELECT * FROM book WHERE author = '';
答案 2 :(得分:0)
您可以根据自己的用例尝试使用语言技巧;
例如:
如果您有一列:column_a
,仅包含正整数。
对于此用例,可通过此列的 Null 个值来过滤结果,
您可以将条件应用为:
where column_a <0
答案 3 :(得分:0)
如果您的表中的您的列名是文本数据类型,则应执行以下操作
SELECT * FROM your_table WHERE your_column_name >= '' ALLOW FILTERING;
答案 4 :(得分:-3)
如果你使用Solr over Cassandra但不确定直接的Cassandra查询,这将有效。
SELECT * FROM BOOK WHERE solr_query = ' -author : [* TO *] '