我是cassandra的新手,我必须将特定查询的结果导出到csv文件。
我找到了COPY
命令,但是(根据我的理解)它只允许你将现有的表复制到csv文件,我想要的是直接将我的查询的stdout复制到csv文件。有没有办法用COPY
命令或用其他方式来做?
我的命令是样式(select column1, column2 from table where condition = xy
),我正在使用cqlsh
。
答案 0 :(得分:42)
如果您不介意使用管道(“|”)作为分隔符来处理数据,可以尝试在cqlsh上使用-e
标志。 -e
标志允许您从命令提示符向Cassandra发送查询,您可以在其中重定向甚至执行输出中的grep / awk /。
$ 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 :(得分:31)
答案 2 :(得分:9)
我刚刚编写了一个工具,可以将CQL查询导出为CSV和JSON格式。试一试:)
答案 3 :(得分:4)
我相信DevCenter还允许您复制到CSV。 http://www.datastax.com/what-we-offer/products-services/devcenter
答案 4 :(得分:4)
在Windows中,应使用双引号括起CQL。
cqlsh -e"SELECT video_id,title FROM stackoverflow.videos" > output.txt
答案 5 :(得分:3)
如果我理解正确,您想将输出重定向到stdout?
将您的cql命令放在一个文件中。我的文件名为select.cql,内容为:
select id from wiki.solr limit 100;
然后发出以下内容并将其转到stdout:
cqlsh < select.cql
我希望这会有所帮助。从那里你可以管它并添加逗号,删除标题等。
答案 6 :(得分: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正则表达式,以更好地适合您的特定情况,但这就是一般想法。
答案 7 :(得分:1)
在2020th,您可以使用DSBulk将数据导出到CSV(默认情况下)或JSON中或从中导入数据。可能很简单:
dsbulk unload -k keyspace -t table -u user -p password -url filename
DSBulk经过严格优化,可快速导出数据,而不会给协调器节点增加太多负担,而这只会在您运行select * from table
时发生。
您可以控制要导出的列,甚至可以提供自己的查询等。有关示例,请参见以下博客文章:
答案 8 :(得分:0)
无法注释...要处理多于100行的“更多”问题,只需在SQL之前添加“分页”即可。
类似
$ bin/cqlsh -e'PAGING OFF;SELECT video_id,title FROM stackoverflow.videos' > output.txt
这会在输出文件的开头造成一些混乱,但之后可以轻松将其删除。
答案 9 :(得分:0)
您可以使用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
答案 10 :(得分:0)
CQL COPY是导入或导出数据的不错选择。但是,如果要分析一些小的查询输出,可以在命令下面运行,并将输出保存在文件中。
cqlsh -e“ SELECT * FROM table WHERE column ='xyz'> queryoutput.txt
但是,您也可以使用CAPTURE来保存查询的输出以分析某些内容
答案 11 :(得分:0)
请按照以下步骤选择性地导出和导入Cassandra数据。
导出:
将所有选择查询写入如下所示的名为 dump.cql 的文件中
分页;
从id = 10的学生中选择*;
从id = 15的学生中选择*;
注意: 必须在查询上方进行分页,以避免将查询结果限制为默认100条记录
cqlsh -u用户名-p'password'ip_address -k keyspace_name -f dump.cql> dump.csv;
(对于远程计算机)
或
cqlsh -k keyspace_name -f dump.cql> dump.csv;
(对于本地计算机)
24.0.0
导入:
cqlsh -e“使用定界符='|'从'data_without_spaces.csv'复制keyspace_name.table_name;“
答案 12 :(得分:0)
正如其他人所建议的,使用 ./cqlsh -e 'SELECT ...' > data.csv 导出标准查询输出。
一旦你有了它,你就可以使用 Excel(如果你安装了它)轻松地用逗号替换管道 (|)。
答案 13 :(得分:-3)
要求提供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