本章节提供一个使用bash语法将Cassandra数据转成csv格式的脚本
cqlsh -e
只能查询100行问题./cqlcsv.sh "cql语句" filename.csv
便可得到执行结果cqlcsv.sh
文件#!/bin/bash
# 该脚本用于将少量Cassandra数据库查询结果转换成csv格式的数据
# 不保证数据的绝对正确性(当数据中满足s/ *| */,/g;或json结构数据,则会出现异常),仅能用于测试使用
# 执行环境:centos7
pid=$$
date=`date +'%m%d%H%M%S'`
file_name="$date"_$pid
cql=$1
target_file=$2
if [ $# -ne 2 ];then
echo "Usage: ./cqlcsv.sh \"cql\" filename.csv"
exit 403
fi
# cqlsh在本地的安装位置
/usr/local/soft/apache-cassandra-3.11.4/bin/cqlsh -e "PAGING OFF; $cql ALLOW FILTERING" > $file_name
if [ $? -ne 0 ];then
echo "cql执行失败"
rm -rf $file_name
exit 400
fi
file=$file_name
# 计算总行数
all_line=$(wc -l $file | awk '{print $1}')
> $target_file
i=1
while read line; do
#sleep 2s
# 过滤空行,最后一行(* rows)
if [ ${#line} -eq 0 -o $all_line -eq $i ];then
#echo $i
let i++
continue
fi
# 第三行制表框
if [[ $line == 'Disabled Query paging.' || $line =~ ^----.* ]];then
#echo $i
let i++
continue
fi
# 替换|和空格
echo $line | sed 's/ *| */,/g; s/^ *//g;' >> $target_file
# 计算进度
let progress=$i*100/$all_line
echo -en "$progress"'%\r'
let i++
done < $file
rm -rf $file_name
echo -e 'OK \r'
参考文档
https://stackoverflow.com/questions/26909408/export-cassandra-query-result-to-a-csv-file
cql转json,csv工具