簡體   English   中英

如何在Cassandra cql中使用條件選擇語句使用某些數據,包括字符“ \\ t”

[英]how to use condition select statement some data including character “\t” in Cassandra cql

我使用datastax庫和spring框架將數據插入Cassandra表

我使用分隔符“ \\ t”連接兩個字符串this.pid +“ \\ t” + this.cid;

如果選擇插入的數據,則可以看到已保存數據

select * from table1;

 pid | cid       | key  | value | update_time
-----+-----------+------+-------+--------------------------
  1 | data1 | key1 | 01\tdata1 | 2019-xx-xx 
  2 | data2 | key2 | 02\tdata2 | 2019-xx-xx 

但是我無法使用select語句選擇該數據

從表1中選擇*,其中pid = 1 AND cid ='data1'AND key ='key1'AND value ='1 \\ tdata1';

我應該轉義'\\ t'字符嗎?

下面是表方案

CREATE TABLE table1 (
    pid int,
    cid text,
    key text,
    value text,
    update_time timestamp,
    PRIMARY KEY (pid, cid, key, value)
)

cql和java插入的數據之間存在差異

我使用Mac OS,在Mac控制台上選擇時,可以看到“ \\ t”字符顏色不同

使用Java插入數據

在此處輸入圖片說明

使用cql插入數據

在此處輸入圖片說明

您已經在其中一條評論中回答了自己,但是為了后代,我想解釋一下發生了什么:

首先,您正在使用“ cqlsh”工具執行SELECT請求。 該工具通過將不可打印的字符轉換為傳統的Unix表示(例如,參見“ cat -v”)來嘗試友好,因此例如在打印時將制表符轉換為“ \\ t”。 但是存儲在數據庫中的實際字符是制表符(ASCII值為9的字符),而不是“ \\ t”。

第二件事是CQL本身不支持這些“轉義”字符。 \\ t或\\ 011之類的東西在CQL中沒有任何特殊含義,“ \\ t”只是兩個字符反斜杠和t! 您需要在查詢字符串中使用實際的制表符。 在Java代碼(或其他現代語言)中,很容易,您可以在字符串常量中使用\\ t,而Java(不是Cassandra)會將其轉換為該查詢字符串中的實際選項卡。 但是,如果您使用cqlsh進行查詢,則沒有人會為您進行此轉換。 您實際上需要輸入該標簽。 由於cqlsh對制表符有特殊處理,因此您需要使用control-V和tab來告訴cqlsh真正放置一個實際的制表符。 我看到您已經自己發現了此解決方案。

您正在使用pid作為字符串,但這是一個整數-請嘗試以下查詢,它將起作用-

從表1中選擇*,其中pid = 1 AND cid ='data1'AND key ='key1'AND value = '01 \\ tdata1';

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM