001_cassandra

本章节提供一个使用bash语法将Cassandra数据转成csv格式的脚本

  1. 解决cqlsh -e只能查询100行问题
  2. 输入./cqlcsv.sh "cql语句" filename.csv便可得到执行结果
  3. 转换过程需要有进度显示

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工具