cassandra for!= null列でクエリするにはどうすればよいですか?.
Select * from tableA where id != null;
Select * from tableA where name != null;
次に、これらの値を保存して、別のテーブルに挿入したいと思いました。
Cassandraではこれは不可能だと思います。まず、Cassandra CQLは、WHERE句でのNOTまたは等しくない演算子の使用をサポートしていません。2番目に、WHERE句には主キー列のみを含めることができ、主キー列はnull値を挿入することはできません。ただし、セカンダリインデックスについては確信が持てなかったため、次の簡単なテストを実行しました。
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);
これで、テーブルと2つの行(1つはnullデータ)ができました。
SELECT * FROM nullTest;
id | name
----+------
2 | null
1 | bob
(2 rows)
次に、null値が含まれていることがわかっているnameにセカンダリインデックスを作成します。
CREATE INDEX nullTestIdx ON nullTest(name);
それは私にそれをさせる。次に、そのインデックスに対してクエリを実行します。
SELECT * FROM nullTest WHERE name=null;
Bad Request: Unsupported null value for indexed column name
そして、これも、実際にはnullである可能性のある列値をクエリできない場合でも、null以外をクエリできないという前提の下で行われます。
だから、これはできないと思います。また、主キーでnull値が発生する可能性がある場合は、データモデルを再評価することをお勧めします。繰り返しますが、OPの質問は、データがどこにあるかをクエリすることについて知っていますnot null。しかし、前に述べたように、Cassandra CQLにはNOTまたは!=演算子がないため、問題が発生します。
別のオプションは、nullの代わりに空の文字列を挿入することです。その後、空の文字列に対してクエリを実行できます。しかし、それでも主キーフィールドにnullがあるという基本的な設計上の欠陥を乗り越えられません。おそらく、複合主キーがあり、その一部(クラスタリング列)だけが空である可能性があった場合(確かに、区分化キーの一部ではない)。しかし、「nullではなく」「空ではない」行をクエリできないという問題に直面することになります。
注:null値の挿入は、デモンストレーションのみを目的としてここで行われました。 null列値を挿入するとトゥームストーンが作成されるため、これは回避するために最善を尽くす必要があるものです。同様に、多数のnull値を挿入すると、多数のトゥームストーンが作成されます。
1)テストから*を選択します。
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はnull値の選択をサポートしていません。理解のためにnullを表示しています。
3)null値を処理するには、「not-available」、「null」などの別の文字列を使用して、データを選択できます