将Cassandra 2.2 Schema导入4.1集群时遇SyntaxException错误求助
解决Cassandra 2.2 Schema导入4.1.2时的
dclocal_read_repair_chance错误 这个问题在从Cassandra 3.0之前版本升级到3.0及以后版本(包括4.1.2)的用户中很常见,不少人都碰到过。
问题原因
Cassandra 3.0开始废弃了dclocal_read_repair_chance这个旧属性,改用read_repair配置块统一管理读取修复相关参数,旧属性在新版集群中不再被识别,因此导入时会抛出语法异常。
解决办法
- 手动修改Schema文件:打开导出的schema文件,找到所有包含
dclocal_read_repair_chance = [数值]的行,要么直接删除这些行,要么替换为新版配置格式。例如把:
替换成:dclocal_read_repair_chance = 0.1read_repair: { dc_local: '0.1' } - 批量处理大文件:在CentOS系统下可以用
sed命令批量操作,比如直接删除旧属性行:
或者直接替换为新格式(注意引号转义):sed -i 's/dclocal_read_repair_chance = [0-9.]*//g' your_schema_file.cqlsed -i 's/dclocal_read_repair_chance = \(0\.[0-9]*\)/read_repair: { dc_local: '\''\1'\'' }/' your_schema_file.cql - 额外排查:顺便检查schema文件中是否存在其他废弃属性(比如
read_repair_chance),这类属性同样需要替换为read_repair下的global参数,格式为read_repair: { global: '0.1' }。
修改完成后,重新执行cqlsh -e "SOURCE 'your_schema_file.cql'"命令,即可正常导入schema。
内容的提问来源于stack exchange,提问作者Cuong Giap
相关产品推荐
相关产品推荐

