2014-06-27 11 views
8

Come interrogare in cassandra per! = Colonne null.SELEZIONA in cassandra dove id! = Null

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

poi volevo memorizzare questi valori e inserire questi in tabella diversa.

+0

'dove id è null'? 'null' è un valore speciale nei database ed è contagioso. qualsiasi operazione eseguita con un valore nullo viene "infetta" e i risultati diventano nulli. non puoi fare 'null = null', e devi usare la speciale sintassi' is null'. –

+0

Seleziona * dalla tabellaA dove id = null; – user3780281

+0

'dove id non è nullo' pure. –

risposta

6

Non credo sia possibile con Cassandra. Prima di tutto, Cassandra CQL non supporta l'uso di NOT o non uguale agli operatori nella clausola WHERE. In secondo luogo, la clausola WHERE può contenere solo colonne di chiavi primarie e le colonne di chiavi primarie non consentono l'inserimento di valori nulli. Non ero sicuro di indici secondari, però, così ho eseguito questo test rapido:

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); 

Ora ho un tavolo e due file (uno con dati nulli):

SELECT * FROM nullTest; 

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

(2 rows) 

Allora provo a creare un indice secondario sul nome, che so contiene valori nulli.

CREATE INDEX nullTestIdx ON nullTest(name); 

Mi consente di farlo. Ora eseguirò una query su quell'indice.

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

E ancora, questo è fatto con la premessa che non si può eseguire una query per non nullo, se non si può nemmeno interrogare per i valori delle colonne che può effettivamente essere NULL.

Quindi, sto pensando che questo non può essere fatto. Inoltre, se nella tua chiave primaria ci sono valori nulli, potresti voler rivalutare il tuo modello di dati. Ancora una volta, so che la domanda dell'OP riguarda l'interrogazione in cui i dati sono non null. Ma come ho detto prima, Cassandra CQL non ha un operatore NOT o! =, Quindi questo sarà un problema proprio lì.

Un'altra opzione consiste nell'inserire una stringa vuota anziché null. Saresti quindi in grado di eseguire una query su una stringa vuota. Ma questo non ti lascia ancora alle spalle l'errore di progettazione fondamentale di avere un null in un campo chiave primaria. Forse se tu avessi una chiave primaria composta, e solo una parte di essa (le colonne di clustering) aveva la possibilità di essere vuota (certamente non parte della chiave di partizionamento). Ma rimarrai bloccato dal problema di non essere in grado di eseguire una query per le righe "non vuote" (anziché non null).

NOTA: l'inserimento di valori nulli è stato effettuato qui solo a scopo dimostrativo. È qualcosa che dovresti fare del tuo meglio per evitare, poiché l'inserimento di un valore di colonna Null creerà una pietra tombale. Allo stesso modo, l'inserimento di molti valori nulli creerà molte pietre tombali.

1

1) selezionare * dal 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) cassandra does't sostegno valori nulli selection.It dimostra nullo per la nostra comprensione.

3) Per la gestione di valori nulli utilizzare un altro stringhe come "non-disponibile", "null", allora possiamo selezionare i dati