带cqlsh -e的Cassandra CLI命令如何声明

时间:2018-08-15 18:39:47

标签: cassandra datastax cql cqlsh

在我的Cassandra表中,它是用大写字母创建的。当我们尝试在cqlsh终端中选择列时,我们能够选择那些列。但是当我们尝试基于cqlsh -e提取相同的查询时,遇到了转义字符的问题。请对此提出建议。

cqlsh:key1> select "PLAN_ID" ,"A_ADVERTISER_ID" ,"ADVERTISER_NAME"  from key1.plan_advertiser where "PLAN_ID" = '382633' and "A_ADVERTISER_ID" = 15019;

 PLAN_ID | A_ADVERTISER_ID | ADVERTISER_NAME
---------+-----------------+----------------------
  382633 |           15019 | Hanesbrands, Updated

NMH206576286LM:sparklatest0802 KarthikeyanDurairaj$ cqlsh -e 'select "PLAN_ID" ,
  "A_ADVERTISER_ID" ,"ADVERTISER_NAME"  from key1.plan_advertiser 
  where "PLAN_ID" = '382633' and "A_ADVERTISER_ID" = 15019'
<stdin>:1:InvalidRequest: Error from server: code=2200 [Invalid query] 
  message="Invalid INTEGER constant (382633) for "PLAN_ID" of type text"

NMH206576286LM:sparklatest0802 KarthikeyanDurairaj$ 

问候 Karthikeyan Rasipalayam Durairaj

1 个答案:

答案 0 :(得分:1)

在这方面,cqlsh可能有些棘手。虽然它不允许您转义单引号,但确实允许您转义双引号。这对我有用:

$ bin/cqlsh -u cassdba -p flynnLives -e "SELECT * FROM stackoverflow.plan_advertiser
   where \"PLAN_ID\" = '382633' and \"A_ADVERTISER_ID\" = 15019"

 PLAN_ID | A_ADVERTISER_ID | ADVERTISER_NAME
---------+-----------------+----------------------
  382633 |           15019 | Hanesbrands, Updated

(1 rows)

通过这种方式,我们将CQL语句的单引号切换为双引号,将单引号用作列值,然后将列名周围的双引号转义。