无法使用Python导出Cassandra表

时间:2017-01-05 09:48:46

标签: python cassandra export cql cqlsh

我正在尝试使用Python将Cassandra表导出为CSV格式。但我不能这样做。但是,我能够从Python执行'select'语句。我使用了以下代码:

from cassandra.cluster import Cluster
cluster = Cluster ()
session = cluster.connect('chandan') ### 'chandan' is the name of the   keyspace
## name of the table is 'emp'
session.execute(""" copy emp (id,name) to 'E:\HANA\emp.csv' with HEADER = true """ )
print "Exported to the CSV file"

请帮助我。

1 个答案:

答案 0 :(得分:4)

这不适合你,因为COPY不是CQL的一部分。

COPY是一个仅限cqlsh的工具。

您可以使用-e标志:

通过命令行或脚本调用此方法
cqlsh 127.0.0.1 -u username -p password -e "copy chandan.emp (id,name) to 'E:\HANA\emp.csv' with HEADER = true"

编辑20170106:

  

使用Python将Cassandra表导出为CSV格式

基本上...... 如何导出整个Cassandra表?

我被问了很多。答案很简短...... DON' T

Cassandra最适合存储数百万甚至数十亿行。它可以做到这一点,因为它在多个节点上分配其负载(操作和大小)。它不擅长的是删除,就地更新和未绑定查询等。我告诉人们做完全导出(未绑定查询)这样的事情有几个原因。

首先,在分布式环境中的大型表上运行未绑定查询通常是非常坏主意(在您的查询中引入了大量网络时间和流量)。其次,您正在获取存储在多个节点上的大型结果集,并将所有数据压缩到一个文件中......可能是一个好主意。

底线:Cassandra不是关系型数据库,为什么你会把它当成一个?

话虽这么说,有一些工具可以用来处理这样的事情; Apache Spark是其中之一。

  

请帮我用session.execute()语句执行查询。

如果你坚持使用Python,那么你需要做一些事情。对于大型桌子,您需要query by token range。您还希望以小批量/页面的方式执行此操作,这样您就不会翻转协调器节点。但是为了避免重新发明轮子,我会告诉你,已经有一个工具(用Python编写)完全正确:cqlsh COPY

实际上newer versions of cqlsh COPY具有允许它避免大型数据集超时的功能(PAGESIZE和PAGETIMEOUT)。我之前使用过新的cqlsh成功导出了3.7亿行,所以我知道它可以完成。

摘要:不要重新发明轮子。编写一个使用cqlsh COPY的脚本,并利用我刚才谈到的所有内容。