我是cassandra的新手,我必须将特定查询的结果导出到csv文件.
我找到了COPY命令,但是(据我所知)它只允许你将现有的表复制到csv文件,我想要的是直接将查询的stdout复制到csv文件.有没有办法用COPY命令或用其他方式做到这一点?
我的命令是style(select column1, column2 from table where condition = xy),我正在使用cqlsh.
Aar*_*ron 49
如果您不介意使用管道("|")作为分隔符来处理数据,则可以尝试-e在cqlsh上使用该标志.该-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)
Run Code Online (Sandbox Code Playgroud)
较旧版本的cqlsh没有该-e标志.对于旧版本的cqlsh,您可以将命令放入文件中,然后使用该-f标志.
$ echo "SELECT video_id,title FROM stackoverflow.videos;" > select.cql
$ bin/cqlsh -f select.cql > output.txt
Run Code Online (Sandbox Code Playgroud)
从这里开始,cat在output.txt上执行操作应该产生与上面相同的行.
Aru*_*run 36
Run Code Online (Sandbox Code Playgroud)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中查看查询的输出
Ale*_*Ott 13
2020 年,您可以使用DSBulk将数据导出到 CSV(默认情况下)或 JSON,或从 CSV(默认情况下)或 JSON 导入数据。它可以很简单:
dsbulk unload -k keyspace -t table -u user -p password -url filename
Run Code Online (Sandbox Code Playgroud)
DSBulk 针对快速数据导出进行了大量优化,不会在您刚刚运行时给协调器节点带来太多负载select * from table。
您可以控制要导出的列,甚至提供您自己的查询等。有关示例,请参阅以下博客文章:
小智 8
您可以使用 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
小智 7
无法评论...要处理超过 100 行时的“MORE”问题,只需在 SQL 前添加“paging off”即可。
就像是
$ bin/cqlsh -e'PAGING OFF;SELECT video_id,title FROM stackoverflow.videos' > output.txt
Run Code Online (Sandbox Code Playgroud)
这会导致输出文件的开头有点混乱,但之后可以轻松删除。
使用bash:
如果您需要查询数据(无法使用 COPY TO)并且需要可导入最终产品(即使用 COPY FROM):
cqlsh -e "SELECT * FROM bar WHERE column = 'baz' > raw_output.txt
Run Code Online (Sandbox Code Playgroud)
然后您可以使用以下命令重新格式化输出sed
sed 's/\ //g; /^----.*/d; /^(/d; /^\s*$/d;' raw_output.txt | tee clean_output.csv
Run Code Online (Sandbox Code Playgroud)
这几乎说明了
sed 'remove spaces; remove the column boarder; remove lines beginning with (COUNT X); and remove blank lines' | write output into clean_output.csv
Run Code Online (Sandbox Code Playgroud)
可以清理 sed 正则表达式以更好地适合您的具体情况,但这就是总体思路。
| 归档时间: |
|
| 查看次数: |
63122 次 |
| 最近记录: |