2017-03-10 34 views
0

最近在我的項目中,Cassandra的驅動程序升級從2.0.4升級到3.1.0。我發現insert語句不適用於具有'json'作爲列名的表。以前的cassandra版本使用相同的插入語句。使用json作爲cassandra表中的列名在cassandra升級後不起作用

樣品插入語句:

INSERT INTO TABLE_NAME(姓名,ID,JSON)的值( 「AAA」, 「123」,「{ 「顯示順序」: 「1」, 「產品ID」: 「QWERTY」}「);

當我試圖在Datastax DevCenter查詢,我收到錯誤爲「沒有可行的替代方案,在輸入‘JSON’

這是否意味着,我們要改變insert語句?

請幫忙!

編輯: 我在示例查詢中犯了一個錯誤,json類型不是問題。當我啓用調試時,我發現問題是與時間戳列。 我沒有提到在我的例子中,因爲我認爲json可能是原因。

這是因爲最近的驅動程序更新到3.1.0,因爲相同的查詢現在不起作用。 當我嘗試修復它時,我無法在3.1.0版本中找到時間戳轉換器函數(toTimestamp)或dateOf()函數。 我只看到了現在(),但它只返回類型timeuuid。

有沒有我可以轉換當前日期爲timestamp任何其他方式?

回答

0

這不是因爲JSON領域,您的插入格式隨附單引號不正確

使用字符串:

[email protected]:test> insert into test_json (name, id, json) values ('AAA', '123', '{"display-order":"1","product-id":"QWERTY"}'); 

[email protected]:test> SELECT * FROM test_json ; 

id | json          | name 
-----+---------------------------------------------+------ 
123 | {"display-order":"1","product-id":"QWERTY"} | AAA 

或雙美元符號爲封裝與字符串引號,反斜槓,或者通常會需要其他字符轉義

[email protected]:test> insert into test_json (name, id, json) values ('AAA', '123', $${"display-order":"1","product-id":"QWERTY"}$$); 
[email protected]:test> SELECT * FROM test_json ; 

id | json          | name 
-----+---------------------------------------------+------ 
123 | {"display-order":"1","product-id":"QWERTY"} | AAA 

順便說一句,如果你想插入當前時間戳使用dateof(now())或者如果應用了Java使用new Date()

+0

感謝@Ashraful的答覆。請在原始問題中找到我的編輯。 –

+0

@ek_cool如果你想插入當前時間戳記使用dateof(now())或者如果你使用java使用新的Date() –