如何编写有条件地修改数据的CQL脚本?

时间:2015-09-01 23:59:27

标签: cassandra cql3

我需要编写一组CQL脚本,其中脚本的运行是否运行应该取决于是否存在某些数据。有没有办法写这种东西:

  <packageSources>
    <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
    <add key="Another Package source" value="https://another.package.source/nuget/" />
  </packageSources>

1 个答案:

答案 0 :(得分:3)

您无法在CQL脚本中直接执行此操作,因为CQL中没有if语句控制逻辑。

但是你可以在调用cqlsh的bash脚本中执行此操作。

您可以像这样在bash中运行命令:

cqlsh -e "insert into test.t1 (p,c) values (1,8) IF NOT EXISTS;"

 [applied]
-----------
      True

这意味着该行不存在并且已插入。现在,如果您再次尝试插入它,它将会失败:

cqlsh -e "insert into test.t1 (p,c) values (1,8) IF NOT EXISTS;"

 [applied] | p | c | v
-----------+---+---+------
     False | 1 | 8 | null

所以你能做的就是捕获那个输出,然后检查它是否被应用,如下所示:

#!/bin/bash
result=`cqlsh -e "insert into test.t1 (p,c) values (1,8) IF NOT EXISTS;"`

if [[ $result == *"applied"*"True"* ]]
then
    echo "the real script"
else
    echo "some error"
fi

另一种方法是使用java驱动程序编写Cassandra客户端。它可以执行“INSERT ... IF NOT EXISTS”或“UPDATE ... IF”,然后测试该语句是否已应用并做出相应的响应。