2014-06-27 105 views
8

如何在cassandra中查詢!= null列。SELECT in cassandra where id!= null

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

然後,我想存儲這些值,並將它們插入到不同的表中。

+0

'其中id是null'? 'null'是數據庫中的一個特殊值,具有傳染性。任何使用null執行的操作都會「受到感染」,並且結果變得無效。你不能'null = null',並且必須使用特殊的'is null'語法。 –

+0

將選擇* from tableA where id = null; – user3780281

+0

'其中id不爲空'。 –

回答

6

我不認爲這是可能的與卡桑德拉。首先,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 

再次,這是你不能查詢不爲空,如果你甚至無法查詢列值可能實際上是空的前提下完成的。

所以,我想這是不能做到的。另外,如果主鍵中有空值,那麼您可能需要重新評估數據模型。再次,我知道OP的問題是關於查詢哪裏的數據是而不是 null。但正如我之前提到的,Cassandra CQL沒有NOT或!=操作符,所以這會成爲一個問題。

另一種選擇是插入空字符串而不是空字符串。然後您將能夠查詢空字符串。但是,這仍然不能解決您在主鍵字段中存在空值的基本設計缺陷。也許如果你有一個複合主鍵,並且只有它的一部分(集羣列)有可能被清空(當然不是分區鍵的一部分)。但是你仍然會遇到無法查詢「非空」行(而不是空)的問題。

注意:插入空值僅用於演示目的。這是你應該儘量避免的事情,因爲插入一個空列值將會創建一個墓碑。同樣,插入大量空值將會創建很多墓碑。

1

1)select * from test;

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)卡桑德拉簡化版,支持空值selection.It正顯示出我們的理解空。

3),用於處理空值的使用,如「不可用」,「空」另一個字符串,那麼我們可以選擇數據

相關問題