如何在Cassandra cql中使用条件select声明一些数据,包括字符“\t”
how to use condition select statement some data including character "\t" in Cassandra cql
我使用 datastax 库和 spring 框架向 Cassandra table 插入数据
我使用分隔符“\t”来连接两个字符串
this.pid + "\t" + this.cid;
如果我select插入数据,我可以看到数据已保存
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 使用 select 语句
的数据
select * 来自 table1 其中 pid=1 AND cid='data1' AND key='key1' AND value='1\tdata1';
我应该转义 '\t' 字符吗?
下面是table方案
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控制台上select时,我可以看到“\t”字符颜色不同
使用java
插入数据
enter image description here
使用cql插入数据
enter image description here
您正在使用 pid 作为字符串,但它是一个整数 - 尝试下面的查询,它会起作用 -
select * 来自表 1,其中 pid=1 AND cid='data1' AND key='key1' AND value='01\tdata1';
您已经在其中一条评论中回答了自己,但为了后代,我想解释一下发生了什么:
首先,您正在使用 "cqlsh" 工具执行 SELECT 请求。该工具试图通过将不可打印的字符转换为传统的 Unix 表示形式(例如,参见 "cat -v")来实现友好,例如制表符在打印时被转换为“\t”。但实际存入数据库的字符是制表符(ASCII值为9的字符),而不是“\t”。
第二件事是CQL本身不支持这些"escaped"字符。 \t 或 \011 之类的东西在 CQL 中没有任何特殊含义,“\t”只是两个字符反斜杠和 t!您需要在查询字符串中使用实际的制表符。在 Java 代码(或其他现代语言)中,这很容易,您可以在字符串常量中使用 \t 并且 Java(不是 Cassandra)会将其转换为该查询字符串中的实际制表符。但是,如果您使用 cqlsh 进行查询,则没有人会为您进行此转换;您需要实际键入该选项卡。因为 cqlsh 对制表符有特殊处理,您需要使用 control-V 和 tab 来告诉 cqlsh 真正放置一个实际的制表符。我看到你自己已经发现了这个解决方案。
我使用 datastax 库和 spring 框架向 Cassandra table 插入数据
我使用分隔符“\t”来连接两个字符串 this.pid + "\t" + this.cid;
如果我select插入数据,我可以看到数据已保存
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 使用 select 语句
的数据select * 来自 table1 其中 pid=1 AND cid='data1' AND key='key1' AND value='1\tdata1';
我应该转义 '\t' 字符吗?
下面是table方案
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控制台上select时,我可以看到“\t”字符颜色不同
使用java
插入数据enter image description here
使用cql插入数据
enter image description here
您正在使用 pid 作为字符串,但它是一个整数 - 尝试下面的查询,它会起作用 -
select * 来自表 1,其中 pid=1 AND cid='data1' AND key='key1' AND value='01\tdata1';
您已经在其中一条评论中回答了自己,但为了后代,我想解释一下发生了什么:
首先,您正在使用 "cqlsh" 工具执行 SELECT 请求。该工具试图通过将不可打印的字符转换为传统的 Unix 表示形式(例如,参见 "cat -v")来实现友好,例如制表符在打印时被转换为“\t”。但实际存入数据库的字符是制表符(ASCII值为9的字符),而不是“\t”。
第二件事是CQL本身不支持这些"escaped"字符。 \t 或 \011 之类的东西在 CQL 中没有任何特殊含义,“\t”只是两个字符反斜杠和 t!您需要在查询字符串中使用实际的制表符。在 Java 代码(或其他现代语言)中,这很容易,您可以在字符串常量中使用 \t 并且 Java(不是 Cassandra)会将其转换为该查询字符串中的实际制表符。但是,如果您使用 cqlsh 进行查询,则没有人会为您进行此转换;您需要实际键入该选项卡。因为 cqlsh 对制表符有特殊处理,您需要使用 control-V 和 tab 来告诉 cqlsh 真正放置一个实际的制表符。我看到你自己已经发现了这个解决方案。