【问题标题】:Can't export Cassandra table using Python无法使用 Python 导出 Cassandra 表
【发布时间】:2023-04-27 10:06:02
【问题描述】:

我正在尝试使用 Python 将 Cassandra 表导出为 CSV 格式。但我做不到。但是,我可以从 Python 执行“选择”语句。我使用了以下代码:

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"

请在这方面帮助我。

【问题讨论】:

    标签: python cassandra export cql cqlsh


    【解决方案1】:

    这对您不起作用,因为 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 表?

    我经常被问到这个问题。简短的回答...不要

    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 的脚本,并利用我刚才谈到的所有内容。

    【讨论】:

    • 谢谢亚伦。抱歉,我无法执行。实际上我是 cassandra 的新手。请帮助我使用 session.execute() 语句执行查询。而且我没有使用任何用户名和密码。
    • 谢谢@Aaron。我会试试的。