#!/bin/bash #Author: Castle Liu #Date: 2014/05/22 #Desc: load data to infobright #Usage: loadDataToInfobright.sh -s or loadDataToInfobright.sh -d {datadir} or loadDataToInfobright.sh -f {datafile} #ERROR CODE INDEX #001 setting_not_correct_error shell passwd arg not correct,you should try -h option. #002 file_not_exists_error the file you pass in not found,you should check. #003 dir_not_exists_error the dir you pass in not found,you should check. USER= PASSWD= DATABASE= _DEFAULT_D='/data/files' _DEFAULT_BACKUP_D='/data/backup' TODAY=`date +"%Y%m%d"` ####functions### #help #function used to print help info. help() { cat <<EOF -d optional,data directory,file names must be start with table name and end with {.[csv|txt]},and in absolute path. -f optional,data file to be loaded,file name start with table name and end with {.[csv|txt]}. -s optional,use default setting. -b optional,backup and delete data files. -h print help info. EOF } #error_exit #exit function for the script error_exit(){ func_name=$1 exit_code=$2 error_code=$3 error_detail=$4 END_TIME=`date +%Y%m%d%H%M%S` echo "${func_name}::error_code::${error_code}" echo "${func_name}::error_detail::${error_detail}" echo "script::Done in ${END_TIME}" exit $2 } #parse_args #parse paremeters. #do pass in the args from shell,for example:parse_args $* parse_args(){ while getopts "hd:f:sb" arg do case ${arg} in h) help exit 0 ;; d) export _DATA_D=${OPTARG} ;; f) export _DATA_F=${OPTARG} ;; s) export _DAFAULT_S=true ;; b) export _BACKUP=true ;; ?) error_exit 1 parse_args 001 'setting_not_correct_error' ;; esac done } #parse_args $* #format_data #format date file,excute befor load_data,turn the format in to something valid. format_data() { _data_f=$1 sed -i "s/'//g" ${_data_f} #replace "'"" with null,purpose:conflick with insert sql } #load_data #load data file into a table,file name start with table name and end with {.[csv|txt]}, and in absolute path. load_data() { _data_f=$1 table_name=`basename ${_data_f} |awk -F [\.] '{print $1}'` type_file=`basename ${_data_f} |awk -F [\.] '{print $2}'` if [[ ! -z ${_data_f} ]] && [[ -f ${_data_f} ]];then if [[ ${type_file} = "csv" ]] || [[ ${type_file} = "txt" ]];then #generate and excute sql echo "Loading data from file ${_data_f}." sql="LOAD DATA INFILE '${_data_f}' INTO TABLE ${DATABASE}.${table_name} FIELDS TERMINATED BY ',';" echo "sql: ${sql}" /usr/bin/mysql-ib -u${USER} -p${PASSWD} -e "${sql}" #echo ${sql} fi else error_exit 1 load_data 002 'file_not_exists_error' fi } #load_data_d #load data dir into a list of table,in absolute path. load_data_d() { _data_d=$1 if [[ ! -z ${_data_d} ]] && [[ -d ${_data_d} ]];then ls ${_data_d}|while read lines do if [[ ${lines} != EOF ]];then file_path=${_data_d}/${lines} format_data ${file_path} load_data ${file_path} fi done else error_exit 1 load_data_d 003 'dir_not_exists_error' fi } #backup_data #backup data files to default directory backup_data(){ backup_file=$1 if [[ -d ${backup_file} ]];then echo "Backuping up directory ${backup_file}." tar -czvf ${_DEFAULT_BACKUP_D}/${START_TIME}.tar.gz ${backup_file} elif [[ -f ${backup_file} ]];then echo "Backuping up file ${backup_file}." file_name=`basename ${backup_file}` tar -czvf ${_DEFAULT_BACKUP_D}/${START_TIME}_${file_name}.tar.gz ${backup_file} else error_exit 1 backup_data 002 'file_not_exists_error' fi rm -rf ${backup_file} } ###main### echo '' START_TIME=`date +%Y%m%d%H%M%S` echo "Start in ${START_TIME}." parse_args $* if [[ ${_DAFAULT_S} ]];then echo "Loading data from default subdirectory, ${_DEFAULT_D}... " _today_tmp_d=${_DEFAULT_D}/${TODAY} load_data_d ${_today_tmp_d} if [[ ${_BACKUP} ]];then backup_data ${_today_tmp_d} fi elif [[ ! -z ${_DATA_D} ]] && [[ -d ${_DATA_D} ]];then echo "Loading data from ${_DATA_D}..." load_data_d ${_DATA_D} if [[ ${_BACKUP} ]];then backup_data ${_DATA_D} fi elif [[ ! -z ${_DATA_F} ]] && [[ -f ${_DATA_F} ]];then load_data ${_DATA_F} if [[ ${_BACKUP} ]];then backup_data ${_DATA_F} fi else error_exit 1 main 001 'setting_not_correct_error' fi END_TIME=`date +%Y%m%d%H%M%S` echo "Done in ${END_TIME}" echo ''