web-dev-qa-db-ja.com

SELECT cassandra where id!= null

cassandra for!= null列でクエリするにはどうすればよいですか?.

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

次に、これらの値を保存して、別のテーブルに挿入したいと思いました。

15
user3780281

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値を挿入すると、多数のトゥームストーンが作成されます。

14
Aaron

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」などの別の文字列を使用して、データを選択できます

3
y durga prasad