2014-01-07 55 views

回答

20

null領域不存在卡桑德拉。

您可能會想到CQL數據模型,它隱藏了某些實現細節以便擁有更易於理解的數據模型。卡桑德拉是稀疏的,這意味着只有實際使用的數據才被存儲。您可以通過將一些測試數據通過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,因爲這更有意義,直觀。

如果你看看從節儉方面的表格,你可以看到該表格不包含coco的年齡。

$ bin/cassandra-cli 
[[email protected]] use test; 
[[email protected]] 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有兩列:agepet,而coco只有一個:age

3

據我所知,你不能用NULL做到這一點。

作爲替代方案,你可以使用不同的空值,例如空字符串:''

在這種情況下,你可以用這樣一個空的作者選擇的所有書籍(假設筆者列適當索引) :除非你自己添加這些

SELECT * FROM book WHERE author = ''; 
-3

如果你在Cassandra上使用Solr,但不知道直接Cassandra查詢,這將起作用。

SELECT * FROM BOOK WHERE solr_query = ' -author : [* TO *] ' 
相關問題