我是cassandra的新手,我必须将特定查询的结果导出到csv文件。
我找到了COPY
命令,但是(根据我的理解)它只允许你将已经存在的表复制到csv文件,我想要的是直接将我的查询的stdout复制到csv文件。有没有办法用COPY
命令或用另一种方式?
我的命令是样式(select column1, column2 from table where condition = xy
),我正在使用cqlsh
。
如果您不介意使用管道(“|”)作为分隔符来处理数据,可以尝试在cqlsh上使用-e
标志。 -e
标志允许您从命令提示符向Cassandra发送查询,您可以在其中重定向甚至在输出上执行grep / awk / whatever。
$ bin/cqlsh -e'SELECT video_id,title FROM stackoverflow.videos' > output.txt
$ cat output.txt
video_id | title
--------------------------------------+---------------------------
2977b806-df76-4dd7-a57e-11d361e72ce1 | Star Wars
ab696e1f-78c0-45e6-893f-430e88db7f46 | The Witches of Whitewater
15e6bc0d-6195-4d8b-ad25-771966c780c8 | Pulp Fiction
(3 rows)
较旧版本的cqlsh没有-e
标志。对于旧版本的cqlsh,您可以将命令放入文件中,并使用-f
标志。
$ echo "SELECT video_id,title FROM stackoverflow.videos;" > select.cql
$ bin/cqlsh -f select.cql > output.txt
从这里开始,在output.txt上执行cat
应该产生与上面相同的行。
询问CSV的人不是文字。
我做了这个黑客得到了我的结果。它对我有用,我继续我的一天。
me:~/MOOSE2# echo "USE ████it; select * from samples_daily_buffer where dog_id=██48;" | cqlsh --cqlversion="3.4.4" cassandra0.stage.███████ | sed -e "s/
| */,/g" | sed -e "s/^ *//g" | tail -n +4 > ./myfile.csv
我刚刚编写了一个工具来将CQL查询导出为CSV和JSON格式。试试看 :)
我相信DevCenter还允许您复制到CSV。 http://www.datastax.com/what-we-offer/products-services/devcenter
在Windows中,应使用双引号括起CQL。
cqlsh -e"SELECT video_id,title FROM stackoverflow.videos" > output.txt
如果我理解正确,您想将输出重定向到stdout?
将您的cql命令放在一个文件中。我的文件叫做select.cql,内容是:
select id from wiki.solr limit 100;
然后发出以下内容,你得到stdout:
cqlsh < select.cql
我希望这有帮助。从那里你可以管它并添加逗号,删除标题等。
您可以使用COPY命令创建CSV文件。例如复制表与选定的列。列是可选的,如果选择它们,则会选择每列。
COPY TABLE (COL1, COL2) TO 'filename.csv' HEADER=TRUE/FALSE
有关更多参考https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlshCopy.html
无法评论...当有超过100行时处理“更多”问题,只需在SQL之前添加“分页关闭”。
就像是
$ bin/cqlsh -e'PAGING OFF;SELECT video_id,title FROM stackoverflow.videos' > output.txt
这会在输出文件的开头引起一些混乱,但之后可以轻松删除。
用bash:
如果您需要查询数据(COPY TO不可能),并且您需要最终产品可导入(即使用COPY FROM):
cqlsh -e "SELECT * FROM bar WHERE column = 'baz' > raw_output.txt
然后,您可以使用sed
重新格式化输出
sed 's/\ //g; /^----.*/d; /^(/d; /^\s*$/d;' raw_output.txt | tee clean_output.csv
几乎说了
sed 'remove spaces; remove the column boarder; remove lines beginning with (COUNT X); and remove blank lines' | write output into clean_output.csv
可以清理sed正则表达式以更好地适应您的具体情况,但这是一般的想法。