Utf 8 如何让我的Cassandra DB将我的键和值表示为UTF8?

Utf 8 如何让我的Cassandra DB将我的键和值表示为UTF8?,utf-8,cassandra,hector,Utf 8,Cassandra,Hector,我是卡桑德拉的新手,一直在玩赫克托API。正如您在下面的屏幕截图中所看到的,我定义了一个列族,当我使用CQL返回行时,它将键和值作为十六进制值返回,如果可能的话,我希望将其作为UTF8值返回。另外,我的列名似乎没有采用,而是使用了“Column1”。我会把我的上校家庭声明贴在下面 //Define ColumnFamily Def in Hector ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDef

我是卡桑德拉的新手,一直在玩赫克托API。正如您在下面的屏幕截图中所看到的,我定义了一个列族,当我使用CQL返回行时,它将键和值作为十六进制值返回,如果可能的话,我希望将其作为UTF8值返回。另外,我的列名似乎没有采用,而是使用了“Column1”。我会把我的上校家庭声明贴在下面

//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)
这一行:

ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition(keyspaceName,"DP_ColumnFamily1",ComparatorType.UTF8TYPE);
创建比较器设置为UTF8的列族。比较器定义列名的数据类型,而不涉及值。CQL足够聪明,可以在运行查询时使用此比较器将名称正确显示为字符串,但它完全没有关于键或值类型的信息

更好的方法是使用新的,它完全避免了节俭,允许您通过CQL做任何事情。然后,您可以在CQL中创建模式,如下所示:

CREATE TABLE Device (
  DeviceID varchar, 
  DeviceName varchar,
  PRIMARY KEY (DeviceID)
);
INSERT INTO Device (DeviceID, DeviceName) 
VALUES ('Some_ID', 'DPIPE0101');
 deviceid | devicename
----------+------------
  Some_ID |  DPIPE0101
RowKey: Some_ID
=> (name=, value=, timestamp=1382118992099000)
=> (name=devicename, value=445049504530313031, timestamp=1382118992099000)
。。。然后像这样插入:

CREATE TABLE Device (
  DeviceID varchar, 
  DeviceName varchar,
  PRIMARY KEY (DeviceID)
);
INSERT INTO Device (DeviceID, DeviceName) 
VALUES ('Some_ID', 'DPIPE0101');
 deviceid | devicename
----------+------------
  Some_ID |  DPIPE0101
RowKey: Some_ID
=> (name=, value=, timestamp=1382118992099000)
=> (name=devicename, value=445049504530313031, timestamp=1382118992099000)
然后,如果在
cqlsh
中进行查询,则如下所示:

CREATE TABLE Device (
  DeviceID varchar, 
  DeviceName varchar,
  PRIMARY KEY (DeviceID)
);
INSERT INTO Device (DeviceID, DeviceName) 
VALUES ('Some_ID', 'DPIPE0101');
 deviceid | devicename
----------+------------
  Some_ID |  DPIPE0101
RowKey: Some_ID
=> (name=, value=, timestamp=1382118992099000)
=> (name=devicename, value=445049504530313031, timestamp=1382118992099000)
请记住,CQL行与存储行没有直接关联,因此您不应该真正混合使用节俭和基于CQL的操作。例外情况是,使用
cassandra cli
查看存储引擎对您的CQL执行的操作非常有用。在这种情况下,它看起来像这样:

CREATE TABLE Device (
  DeviceID varchar, 
  DeviceName varchar,
  PRIMARY KEY (DeviceID)
);
INSERT INTO Device (DeviceID, DeviceName) 
VALUES ('Some_ID', 'DPIPE0101');
 deviceid | devicename
----------+------------
  Some_ID |  DPIPE0101
RowKey: Some_ID
=> (name=, value=, timestamp=1382118992099000)
=> (name=devicename, value=445049504530313031, timestamp=1382118992099000)