5

SQL の複合主キーには null 値がないため、これはばかげているように聞こえるかもしれません。しかし、CQL3で同じことができるかどうかを確認したいだけですか?
したがって、幅の広い行を格納するために、次のようなテーブルがあります。

CREATE TABLE keyspace12.colFamily1 
(
  id text, 
  colname text,
  colvalue blob,
  PRIMARY KEY (id,colname, colvalue)
) WITH COMPACT STORAGE

また、colname が null の場合もあります。それをしてもいいですか?はいの場合、どのように?NOの場合、cassandraの複合列の最初の部分にnullを含めることができる幅の広い列の行を格納する方法は何ですか(Thriftの慣例に従って)?

関連する質問は次のとおりです 。CQL3と数百万の列の複合キーのユースケースCassandra - cqlshを使用して複合列名(キーではない)を作成する方法

4

3 に答える 3

3

列ファミリーがあるとします

CREATE TABLE cnt_test (time_slot text , comp1 text, comp2 text, field1 counter, field2 counter, PRIMARY KEY(time_slot,comp1, comp2));

今、私はそれにいくつかのデータを挿入しようとしています

UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='' AND comp2='ABC';
UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='' AND comp2='ABC';
UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='' AND comp2='ABC';
UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='' AND comp2='XYZ';
UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='PQR' AND comp2='';

上記のステートメントでわかるように、複合キー部分にいくつかの空の値を挿入しました。null の代わりに空白文字を入れています。

同じクエリを実行することもできます

 SELECT * FROM cnt_test WHERE time_slot='20130924' AND comp1='' AND comp2='ABC';

 time_slot | comp1 | comp2 | field1 | field2
-----------+-------+-------+--------+--------
  20130924 |       |   ABC |      4 |      8

(1 rows)

SELECT * FROM cnt_test WHERE time_slot='20130924' AND comp1='PQR' AND comp2='';

 time_slot | comp1 | comp2 | field1 | field2
-----------+-------+-------+--------+--------
  20130924 |   PQR |       |      1 |      2

(1 rows)

したがって、すべてを要約するには、null 列の値を空の列に置き換えるだけです。''

于 2013-09-24T14:47:54.807 に答える