将cassandra查询结果导出到csv文件

问题描述 投票:36回答:10

我是cassandra的新手,我必须将特定查询的结果导出到csv文件。

我找到了COPY命令,但是(根据我的理解)它只允许你将已经存在的表复制到csv文件,我想要的是直接将我的查询的stdout复制到csv文件。有没有办法用COPY命令或用另一种方式?

我的命令是样式(select column1, column2 from table where condition = xy),我正在使用cqlsh

cassandra cqlsh
10个回答
47
投票

如果您不介意使用管道(“|”)作为分隔符来处理数据,可以尝试在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应该产生与上面相同的行。


-1
投票

询问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


34
投票
  1. 使用CAPTURE命令将查询结果导出到文件。
cqlsh> CAPTURE
cqlsh> CAPTURE '/home/Desktop/user.csv';
cqlsh> select *from user;
Now capturing query output to '/home/Desktop/user.csv'.

现在,在/home/Desktop/user.csv中查看查询的输出

  1. 使用DevCenter并执行查询。右键单击输出并选择“全部复制为CSV”以将输出粘贴为CSV。

enter image description here


10
投票

我刚刚编写了一个工具来将CQL查询导出为CSV和JSON格式。试试看 :)

https://github.com/tenmax/cqlkit


4
投票

我相信DevCenter还允许您复制到CSV。 http://www.datastax.com/what-we-offer/products-services/devcenter


4
投票

在Windows中,应使用双引号括起CQL。

cqlsh -e"SELECT video_id,title FROM stackoverflow.videos" > output.txt


3
投票

如果我理解正确,您想将输出重定向到stdout?

将您的cql命令放在一个文件中。我的文件叫做select.cql,内容是:

select id from wiki.solr limit 100;

然后发出以下内容,你得到stdout:

cqlsh < select.cql

我希望这有帮助。从那里你可以管它并添加逗号,删除标题等。


2
投票

您可以使用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


1
投票

无法评论...当有超过100行时处理“更多”问题,只需在SQL之前添加“分页关闭”。

就像是

$ bin/cqlsh -e'PAGING OFF;SELECT video_id,title FROM stackoverflow.videos' > output.txt

这会在输出文件的开头引起一些混乱,但之后可以轻松删除。


1
投票

用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正则表达式以更好地适应您的具体情况,但这是一般的想法。

© www.soinside.com 2019 - 2024. All rights reserved.