Cassandra CQL2:无法更新列

时间:2015-04-07 11:49:55

标签: cassandra

嗨我在cassandra db中有一个专栏家庭,当我检查表的内容时,它用作

时显示不同
./cqlsh -2
select * from table1;

KEY,31281881-1bef-447a-88cf-a227dae821d6 | A,0xaa| Cidr,10.10.12.0/24 | B,0xac | C,0x01 | Ip,10.10.12.1 | D,0x00000000 | E,0xace | F,0x00000000 | G,0x7375626e657431 | H,0x666230363 | I,0x00 | J,0x353839

输出与

的输出相同
./cqlsh -3
select * from table1;

 key                                  | Cidr          | Ip
--------------------------------------+---------------+------------
 31281881-1bef-447a-88cf-a227dae821d6 | 10.10.12.0/24 | 10.10.12.1

使用java程序运行插入此值。

我想假设只在数据库中手动使用-2选项时看到的库“B”的更新值,它给出了它是十六进制值的错误。 我正在使用此命令进行更新但始终收到错误

  

cqlsh:sdnctl_db>更新表1 SET B ='0x7375626e657431'其中key ='31281881-1bef-447a-88cf-a227dae821d6';

     

错误请求:无法将“0x7375626e657431”解析为十六进制字节

     

cqlsh:sdnctl_db>更新表1 SET B = 0x7375626e657431其中key ='31281881-1bef-447a-88cf-a227dae821d6';

     

错误请求:第1:30行输入'x7375626e657431'

没有可行的选择      

cqlsh:sdnctl_db>更新表1 SET B = 7375626e657431其中key ='31281881-1bef-447a-88cf-a227dae821d6';

     

错误请求:第1:37行不匹配的字符'6'期待' - '

我需要插入仅由应用程序挑选但不能插入的十六进制值。

请帮助我纠正语法。

1 个答案:

答案 0 :(得分:0)

这取决于列B具有的数据类型。 Here is the reference of the CQL data types.文档说明blob数据表示为十六进制字符串,因此我的假设是您的列B也是blob。从this other cassandra question (and answer)开始,您将看到如何将字符串插入blob。

cqlsh:so> CREATE TABLE test (a blob, b int, PRIMARY KEY (b));
cqlsh:so> INSERT INTO test(a,b) VALUES (textAsBlob('a'), 0);
cqlsh:so> SELECT * FROM test;

b | a
---+------
0 | 0x61
cqlsh:so> UPDATE test SET a = textASBlob('b') WHERE b = 0;
cqlsh:so> SELECT * FROM test;

 b | a
---+------
 0 | 0x62

在您的情况下,您可以将十六进制字符串转换为代码中的char字符串,然后使用cqlsh的textAsBlob函数。

如果B列的数据类型为int,为什么在执行插入之前不将十六进制数转换为int?