通过Shell脚本执行CQL?

34

我正在尝试从 shell 脚本执行 CQL 命令。 我能够连接到 cqlsh(我使用的 CQL 版本是 1.1.18),但无法将查询发送到 cql。

有任何想法或建议该如何解决这个问题? 我需要连接到 Cassandra 并在 shell 脚本中执行一些命令(例如 select/update)吗?

5个回答

51
cqlsh -e "select * from ks.table limit 1;" > ~/output

1
“-e”标志在1.1.18版本的cqlsh中不可用(这是OP问题的关键)。 - Aaron
10
当时它还没有可用。但是拥有包含最新答案的前几个谷歌搜索结果确实非常有用。无论如何,问问题的人都不会接受任何答案。 - Scott Prive
1
@Aaron 我的 Cqlsh 版本是 4.1.1。之前 -e 命令可以正常工作,现在不确定是什么原因导致出错。我正在使用 Python 2.7。 - SibiCoder

16

我不确定关于Cassandra 1.1.18的情况,但你应该能够通过cqlsh-f标志来完成此操作。假设有一个名为"commands.cql"的CQL命令文件,我可以像这样调用这些命令对我的本地Cassandra实例执行:

$ cqlsh -f commands.cql -u myusername -p mypassword localhost
如果我想在Bash脚本中调用它,那么脚本的代码会类似于这样:
#!/bin/bash
cqlsh -f commands.cql -u myusername -p mypassword localhost

将其保存为可执行文件,并像其他文件一样运行。


7
需要连接到Cassandra并使用shell脚本执行一些命令(select / update)。
您可以按照以下方式使用shell脚本执行命令:
echo "some QUERY; exit" | cqlsh CASSANDRA_HOST -u 'USER' -p 'PASS'

6
在上一条建议中,“exit”命令有点hacky。我建议使用“xargs”和“cqlsh -e”。可以像这样操作:
echo "some QUERY;" | xargs cqlsh CASSANDRA_HOST -u 'USER' -p 'PASS' -e 最近,当我使用docker时,不得不采用这种方法,因为“clqsh -f”不是一个选项(配置访问所需文件太复杂)。

2
echo "some QUERY;" | xargs cqlsh CASSANDRA_HOST -u 'USER' -p 'PASS' -e

但是如果您的Cassandra实例位于与执行shell脚本的服务器不同的位置呢?(特别是在StreamSets中 - 上述是否需要安装Cassandra在同一台服务器上,以便其可以访问cqlsh库?)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接