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

使用cqlsh COPY FROM导入TSV时DELIMITER='\t'报错求助

解决cqlsh COPY FROM导入TSV时DELIMITER='\t'报错的问题

问题原因

当在CQL脚本文件中写DELIMITER='\t'时,cqlsh会把\t当作两个独立字符(反斜杠+字母t)处理,而非解析为单个制表符,因此触发"delimiter must be a 1-character string"错误。这并非旧bug复现,而是cqlsh解析CQL文件的规则导致——通过-f参数读取脚本时,cqlsh不会自动解析字符串内的转义序列。

解决方案

方案1:用实际制表符替换转义序列

直接在CQL文件的DELIMITER值中输入真实的制表符(按下Tab键输入),替换原来的\t:

COPY test.simple_table (id, value) FROM '/tmp/import_data.tsv' WITH HEADER=false AND DELIMITER='    ';
# 注意:引号内是一个真实的制表符,不是空格

方案2:通过命令行直接执行COPY命令

如果不想修改CQL文件,可将完整命令通过cqlsh的-e参数传递,让shell解析转义序列:

docker run --rm --network cassandra-net -v "$(pwd)/test.tsv:/tmp/import_data.tsv" -e CQLSH_HOST=cassandra-host -e CQLSH_PORT=9042 cassandra /opt/cassandra/bin/cqlsh -e "CREATE KEYSPACE IF NOT EXISTS test WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : '1' }; CREATE TABLE IF NOT EXISTS test.simple_table (id int PRIMARY KEY, value text); COPY test.simple_table (id, value) FROM '/tmp/import_data.tsv' WITH HEADER=false AND DELIMITER='$'\t''"

这里利用shell的$'\t'语法将转义序列解析为实际制表符,再传递给cqlsh。

方案3:配置cqlshrc默认分隔符(可选)

如果频繁导入TSV文件,可在容器内挂载或创建~/.cassandra/cqlshrc文件,添加以下内容设置默认分隔符:

[copy]
delimiter = \t

之后执行COPY命令时无需指定DELIMITER参数,cqlsh会自动使用制表符作为分隔符。

内容的提问来源于stack exchange,提问作者Mauro Meneghin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:20:11