web-dev-qa-db-fra.com

SELECT dans cassandra where id! = Null

Comment faire une requête dans cassandra pour les colonnes! = Null.

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

Ensuite, je voulais stocker ces valeurs et les insérer dans un tableau différent.

15
user3780281

Je ne pense pas que ce soit possible avec Cassandra. Tout d'abord, Cassandra CQL ne prend pas en charge l'utilisation des opérateurs NOT ou non égal à dans la clause WHERE. Deuxièmement, votre clause WHERE ne peut contenir que des colonnes de clé primaire, et les colonnes de clé primaire seront n'autorise pas l'insertion de valeurs nulles. Je n'étais cependant pas sûr des index secondaires, j'ai donc exécuté ce test rapide:

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

J'ai maintenant une table et deux lignes (dont une avec des données nulles):

SELECT * FROM nullTest;

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

(2 rows)

J'essaie ensuite de créer un index secondaire sur le nom, qui je sais contient des valeurs nulles.

CREATE INDEX nullTestIdx ON nullTest(name);

Ça me permet de le faire. Maintenant, je vais exécuter une requête sur cet index.

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

Et encore une fois, cela se fait sous la prémisse que vous ne pouvez pas interroger pour non nul, si vous ne pouvez même pas interroger pour les valeurs de colonne qui peuvent réellement être nulles.

Donc, je pense que cela ne peut pas être fait. De plus, si des valeurs nulles sont possibles dans votre clé primaire, vous souhaiterez peut-être réévaluer votre modèle de données. Encore une fois, je sais que la question de l'OP est de demander où les données sont pas null. Mais comme je l'ai mentionné précédemment, Cassandra CQL n'a pas d'opérateur NOT ou! =, Donc ça va être un problème ici.

Une autre option consiste à insérer une chaîne vide au lieu d'une valeur nulle. Vous pourrez alors interroger une chaîne vide. Mais cela ne vous permet toujours pas de surmonter la faille fondamentale de conception d'avoir un null dans un champ de clé primaire. Peut-être que si vous aviez une clé primaire composite, et qu'une partie seulement (les colonnes de clustering) avaient la possibilité d'être vide (certainement pas une partie de la clé de partitionnement). Mais vous seriez toujours aux prises avec le problème de ne pas pouvoir interroger les lignes qui ne sont pas "vides" (au lieu de non nulles).

REMARQUE: L'insertion de valeurs nulles a été effectuée ici à des fins de démonstration uniquement. C'est quelque chose que vous devriez faire de votre mieux pour éviter, car l'insertion d'une valeur de colonne nulle créera une pierre tombale. De même, l'insertion de nombreuses valeurs nulles créera de nombreuses pierres tombales.

14
Aaron

1) sélectionnez * dans le 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 ne prend pas en charge la sélection des valeurs nulles.

3) Pour gérer les valeurs nulles, utilisez une autre chaîne comme "non disponible", "null", nous pouvons alors sélectionner les données

3
y durga prasad