0

私は Cassandra を初めて使用し、Hector API をいじっています。以下のスクリーンショットでわかるように、列ファミリーが定義されており、CQL を使用して行を返すと、キーと値が 16 進数値として返されます。可能であれば、UTF8 値として返したいと思います。また、私の列名が取られていないようです。代わりに「Column1」を使用しています。以下に私のcol家族宣言を掲載します。

//Define ColumnFamily Def in Hector
            ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition(keyspaceName,"DP_ColumnFamily1",ComparatorType.UTF8TYPE);      


            //Add the column family to actual Cassandra Instance
            cluster.addColumnFamily(cfDef,false);

            stringSerializer = StringSerializer.get();

             //The following example inserts a Column with the column name "Datapower_Device_Name" and the column value of "DPIPE0101" under the key "key1". 

            Mutator mutator = HFactory.createMutator(ksp, stringSerializer);
            mutator.insert("key1", "DP_ColumnFamily1", HFactory.createStringColumn("Datapower_Device_Name", "DPIPE0101"));


cqlsh:test3> select * from "DP_ColumnFamily1";

 key        | column1               | value
------------+-----------------------+----------------------
 0x6b657931 | Datapower_Device_Name | 0x445049504530313031

(1 rows)
4

1 に答える 1

1

この行:

ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition(keyspaceName,"DP_ColumnFamily1",ComparatorType.UTF8TYPE);

コンパレーターが UTF8 に設定された列ファミリーを作成します。コンパレータは列のデータ型を定義し、値については何も言いません。CQL は、クエリの実行時にこのコンパレータを使用して名前を文字列として正しく表示するほどスマートですが、キーまたは値の型に関する情報はまったくありません。

より良いアプローチは、Thrift を完全に回避し、CQL 経由ですべてを実行できる新しいネイティブ ドライバーを使用することです。次に、次のように CQL でスキーマを作成できます。

CREATE TABLE Device (
  DeviceID varchar, 
  DeviceName varchar,
  PRIMARY KEY (DeviceID)
);

...次に、次のように挿入します。

INSERT INTO Device (DeviceID, DeviceName) 
VALUES ('Some_ID', 'DPIPE0101');

次に、クエリを実行するcqlshと、次のようになります。

 deviceid | devicename
----------+------------
  Some_ID |  DPIPE0101

CQL 行はストレージ行に直接相関するわけではないため、Thrift と CQL ベースの操作を実際に混在させるべきではないことに注意してください。cassandra-cli例外は、ストレージ エンジンが CQL で何を行っているかを確認するために使用すると役立つことです。この場合、次のようになります。

RowKey: Some_ID
=> (name=, value=, timestamp=1382118992099000)
=> (name=devicename, value=445049504530313031, timestamp=1382118992099000)
于 2013-10-18T18:00:15.837 に答える