2015-04-07 73 views
1

您好我有在卡桑德拉分貝的ColumnFamily和當我檢查表的內容中,示出不同地卡桑德拉CQL2:無法更新列

./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選項時纔會看到coulmn「B」的更新值,它給了我錯誤,它是十六進制值。 我使用這個命令來更新,但總是得到錯誤

cqlsh:sdnctl_db> update table1 SET B='0x7375626e657431' where key='31281881-1bef-447a-88cf-a227dae821d6';

Bad Request: cannot parse '0x7375626e657431' as hex bytes

cqlsh:sdnctl_db> update table1 SET B=0x7375626e657431 where key='31281881-1bef-447a-88cf-a227dae821d6';

Bad Request: line 1:30 no viable alternative at input 'x7375626e657431'

cqlsh:sdnctl_db> update table1 SET B=7375626e657431 where key='31281881-1bef-447a-88cf-a227dae821d6';

Bad Request: line 1:37 mismatched character '6' expecting '-'

我需要插入的十六進制值僅會被應用程序所回升,但無法插入。

請幫助我糾正語法。

回答

0

這取決於列B具有的數據類型。 Here is the reference of the CQL data types.該文檔說blob數據表示爲一個十六進制字符串,所以我的假設是您的列B也是一個blob。從this other cassandra question (and answer)您可以看到如何將字符串插入到斑點中。

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 

在你的情況,你可以在你的十六進制字符串轉換爲代碼中一個字符串,然後用cqlsh的textAsBlob功能。

如果B列的數據類型是int而不是在執行插入前將十六進制數轉換爲int?

+0

這些命令工作完全使用CQL 3.0 但問題是,我想編輯使用CQL 2只中出現的數據或通過附加「-2」選項與cqlsh 想我現在開始-2選項,檢查內容的測試表,他們是如下關於 [cqlsh 2.3.0 | Cassandra 0.0.0 | CQL規範2.0.0 | Thrift協議19.35.0] 使用幫助尋求幫助。 cqlsh>使用如此; cqlsh:so> SELECT * FROM test; b | '\ x00 \ x00 \ x00'| '\ x00 \ x01a \ x00' --- + ---------------- + ----------------- 0 | 0x | 0x62 – tarun

+0

現在更新它並添加另一個coulmn作爲 cqlsh:so> update test set x =''其中b = 0; cqlsh:so> SELECT * FROM test; b | '\ x00 \ x00 \ x00'| '\ x00 \ x01a \ x00'| '\ x00 \ x01x \ x00' --- + ---------------- + ----------------- + - --------------- 0 | 0x | 0x62 | 0x 但是這個命令失敗如下 cqlsh:so> update test set x = textAsBlob('5')where b = 0; (' cqlsh:sdnctl_db>更新測試集x = 5其中b = 0; 錯誤請求:無法以十六進制字節解析'5' – tarun

+0

[參考blob in cassandra 1.2](http://docs.datastax.com/en/cql/3.0/cql/cql_reference/blob_r.html)提到'set col = 0xABC123'命令應該可以工作,但是其他幾個網站都說cqlsh v2已被棄用,您應該轉移到v3。我知道這並不回答你的問題,但我不能真正在我的機器上測試它:'cqlsh:error:'2.0.0'不是支持的CQL版本.' – csima