cqlsh使用cqlsh -e执行问题

时间:2017-05-17 02:35:53

标签: shell cassandra cqlsh

我很难用-e选项执行,列名是引号。

我想使用unix级别执行下面的操作。试图从shell脚本运行。当我尝试将我的值放在引号中时,它会删除我的列的引号。

select * from keyspace.cf where "columnname"=''

试过这个:

cqlsh hostname -e "select * from keyspace.cf where "columnname"=''"

它正在执行cqlsh hostname -e'select * from keyspace.cf where columnname ='

stdin>:1:InvalidRequest: Error from server: code=2200 [Invalid query] message="Undefined name columnaname in where clause ('columnname= 'value'')"

1 个答案:

答案 0 :(得分:0)

您不需要在columnname周围加上引号,只需设置它并在其前面添加$。

cqlsh -u cassandra -p cassandra -e "SELECT $COLUMN FROm $KEYSPACE.$TABLE;"

这是我写的一个名为getVersion.sh的脚本的摘录。

#!/bin/bash

KEYSPACE="system"
TABLE="local"
COLUMN="release_version"

~/local/apache-cassandra-3.10/bin/cqlsh -u cassandra -p cassandra -e "SELECT $COLUMN FROm $KEYSPACE.$TABLE;"

aploetz@dockingBay94:~/scripts$ ./getVersion.sh 

 release_version
-----------------
            3.10

(1 rows)

如果您的列名称包含引号,则相同。请务必在变量定义中转义它们。这是一个类似的脚本,但它会查询"columnName" TEXT列:

#!/bin/bash

KEYSPACE="stackoverflow"
TABLE="stuff_with_quotes"
COLUMN="\"columnName\""

~/local/apache-cassandra-3.10/bin/cqlsh -u cassandra -p cassandra -e "SELECT $COLUMN FROm $KEYSPACE.$TABLE;"