CQLEngine を使用して Cassandra で値のない列を作成する方法について質問があります。なんらかの目的で、列の値ではなく列名に情報を格納したいということです。ただし、CqlEngine では、モデル ファイルでプロジェクトを実行する前に、列名を定義する必要があります。助けてくれてありがとう。
2 に答える
まず、列ファミリーを次のように定義する必要があります: create table test( user text, itemLiked text, primary key (user,itemLiked))
したがって、ユーザーは行キーで、itemLiked はクラスタリング キーです。この cf に値を挿入すると、cassanndra はそのための行を (内部的に) 作成せず、itemliked 値は列の名前になり、 test(user , itemLiked) 値 ( "user1","Item1"); に挿入されます。test(user , itemLiked) 値 ( "user1","Item1") に挿入します。
そのため、cassandra は行キー user1 に対して Item1 と Item2 という名前の 2 つの列を作成します。この列には値がなく、この記事で説明されているよう に : http://cassandra.apache.org/doc/cql3/CQL.htmlテーブルは、PRIMARY KEY の一部ではない列を少なくとも 1 つ定義する必要があります。これは、そのような列の 1 つに少なくとも 1 つの値が含まれている場合にのみ行が Cassandra に存在するためです。
あなたが求めていることは、従来、独自の列名を定義して、Thrift API と幅の広い行を使用して達成されていました。これは CQL3 の仕組みではありません。この方法で作業したい場合は、pycassa を使用するか、複合キーを使用して列を作成できます。
たとえば、CQL3 の場合:
create table ratings
( user_id uuid, item_id uuid,
rating int,
primary key (user_id, item_id));
実際には、user_id をキーとして幅の広い行を作成します。列には item_id があり、評価が値になります。複合主キーを使用すると、行が列に転置されます。
これを読みたいかもしれません: http://brianoneill.blogspot.com/2012/09/composite-keys-connecting-dots-between.html