1

オンラインドキュメントから:CQL 3テーブルの主キーには任意の数(1つ以上)のコンポーネント列を含めることができますが、主キーの一部ではない列が少なくとも1つ存在する必要があります。

その理由は何ですか?

CQLの複合キーの列のみで行を挿入しようとしました。SELECTすると見えない

cqlsh:demo> CREATE TABLE DEMO ( 
user_id bigint,
    dep_id bigint,
    created timestamp,
    lastupdated timestamp,
    PRIMARY KEY (user_id, dep_id)
     );

cqlsh:demo> INSERT INTO DEMO (user_id, dep_id)
     ...   VALUES (100, 1);

cqlsh:demo> select * from demo;


 cqlsh:demo>

しかし、cliを使用すると、次のように表示されます。

default@demo] list demo;
Using default limit of 100
Using default column limit of 100
-------------------
RowKey: 100

1 Row Returned.
Elapsed time: 27 msec(s).

しかし、列の値を見ることができません。

主キーにない列を追加すると、値がCQLに表示されます

 cqlsh:demo> INSERT INTO DEMO (user_id, dep_id, created)
         ...   VALUES (100, 1, '7943-07-23');
  cqlsh:demo> select * from demo;
  user_id | dep_id | created                  | lastupdated
  ---------+--------+--------------------------+-------------
   100 |      1 | 7943-07-23 00:00:00+0000 |        null

CLIの結果:

 [default@demo] list demo;
 Using default limit of 100
 Using default column limit of 100
  -------------------
 RowKey: 100
 invalid UTF8 bytes 0000ab7240ab7580
 [default@demo]

何か案が?
更新:CLIが無効なUTF8バイト0000ab7240ab7580を返す理由を見つけました。これは、CQL3から作成されたテーブルと互換性がありません。コンパクトストレージオプションを使用すると、CLIの値が正しく表示されます。

4

2 に答える 2

0

内部で実際に起こっていることは、非キー値が、行キーと列名を構成する主キー値を使用して保存されていることです。キー以外の値を挿入しない場合、実際には新しい列ファミリー列を作成していません。行キーは最初の主キーから取得されるため、列が作成されていなくても、Cassandraが新しい行を作成できたのはそのためです。

于 2012-10-29T21:49:39.477 に答える
0

この制限は、現在ベータ版であるCassandra1.2で修正されています。

于 2012-10-30T16:34:19.413 に答える