You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用stdout和dsbulk工具将Cassandra数据导出为csv.gz格式

Cassandra直接导出gzip压缩CSV文件的实现方案

Cassandra原生不提供类似PostgreSQL COPY TO PROGRAM 直接在CQL层调用外部压缩工具导出文件的语法,但可以通过以下两种方案实现需求,无需使用dsbulk,也不会产生冗余的未压缩临时文件、不会把数据输出到终端stdout。

方案1:cqlsh结合管道直接导出压缩文件

适合快速导出、不想写代码的场景,Linux/macOS环境下直接执行以下命令即可:

cqlsh -e "COPY <你的键空间名>.<你的表名> TO '/dev/stdout' WITH HEADER = true AND DELIMITER = ','" | gzip > /目标路径/导出文件.csv.gz
  • 该命令中cqlsh的查询输出直接通过管道传递给gzip进程压缩,全程不会在终端打印数据,也不会生成临时的未压缩CSV文件
  • 可以根据需求调整COPY命令的参数,比如指定导出的列、添加过滤条件、修改分隔符等

方案2:Python驱动自定义导出

适合需要自定义导出逻辑、对导出过程可控性要求高的场景,仅需依赖Cassandra官方Python驱动,无需其他第三方工具:
首先安装依赖:

pip install cassandra-driver

然后运行如下脚本即可:

from cassandra.cluster import Cluster
import gzip
import csv

# 配置Cassandra连接信息
CASSANDRA_HOSTS = ['127.0.0.1'] # 替换为你的节点IP
KEYSPACE = 'your_keyspace' # 替换为你的键空间名
EXPORT_TABLE = 'your_table' # 替换为你的表名
EXPORT_COLUMNS = ['col1', 'col2', 'col3'] # 替换为要导出的列名
EXPORT_PATH = '/path/to/export.csv.gz' # 替换为导出文件路径

# 建立连接
cluster = Cluster(CASSANDRA_HOSTS)
session = cluster.connect(KEYSPACE)

# 逐行写入压缩文件
with gzip.open(EXPORT_PATH, 'wt', encoding='utf-8', newline='') as gz_file:
    csv_writer = csv.writer(gz_file)
    # 写入表头
    csv_writer.writerow(EXPORT_COLUMNS)
    # 分页查询避免内存溢出
    query = f"SELECT {','.join(EXPORT_COLUMNS)} FROM {EXPORT_TABLE}"
    rows = session.execute(query, timeout=None)
    for row in rows:
        csv_writer.writerow(row)

# 释放连接
cluster.shutdown()
  • 全程数据直接写入gzip压缩流,无stdout输出,无临时文件
  • 可灵活添加查询过滤条件、自定义字段格式、设置导出限速等逻辑

内容的提问来源于stack exchange,提问作者Janani K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:27:00