这篇文章主要通过工作中shell脚本案例,介绍shell脚本中常用知识点
下面的这个脚本表示使用sqoop把生产数据库mysql中的商户交易数据导入到hive数据库,且生产数据库中商户交易数据是分库分表存放的(10个库100个表中),分表分库原则根据商户F_merchant_id来分的,比如说一个商户号F_merchant_id=‘xxxxx855’,可以看到商户号是倒数第三位是8,分库的时候会存放到第8个数据库中,最后两位数字是55,所以分表的时候会存放到第55张表中。所以对于商户号xxxxx855的所有交易数据会存放到第8个数据库,第55个表中。
#抽取从2019年1月4号到2019年2月10日的所有商户交易数据
begin_date="20190104" #定义开始时间变量
end_date="20190210" #定义结束时间变量
while [ "$begin_date" -le "$end_date" ] #$begin_date表示参数的引用
do
y=${begin_date:0:4}
m=${begin_date:4:2}
d=${begin_date:6:2}
echo "${y}-${m}"
begin_date=$(date -d "${begin_date}+1days" +%Y%m%d)
y1=${begin_date:0:4}
m1=${begin_date:4:2}
d1=${begin_date:6:2}
for ((db=0;db<=9;db=db+1)) #从0到9,每次加1,共迭代10次 循环10个库
do
for ((j=0;j<=99;j=j+10))
do
querystr=''
for((k=1;k<=10;k++))#一次union 10个表
do
tb1[$k]=$[(${j}+k-1)/10] #相除
tb2[$k]=$[(${j}+k-1)%10] #取余
table[$k]="select F_transaction_id,F_order_id,F_merchant_id from datafrog${db}.t_transaction_operation_by_merchant_${tb1[$k]}${tb2[$k]} where F_time>='${y}-${m}-${d}' AND F_time<'${y1}-${m1}-${d1}' "
if [ $k -gt 1 ]
then
querystr="${querystr} union all ${table[$k]} "
else
querystr="${table[$k]}"
fi