分享

封装一个shell脚本去除hive中繁杂的select columns

场景:工作中时长会有操作hive覆盖指定表或者目录数据的需求,比如:
insert overwrite local directory '$dataPath' row format delimited fields terminated by '\t'
select column1,column2…… from srcTab where pt_hour = '$date';

问题:
如何避免多次写相同代码,或者避免漏字段、写错字段等情况


解决方案:
此处只使用shell脚本封装,当然智者见智,方案不止一种
#!/bin/bash

source /etc/profile
echo 'start $0 `date`'

table=$1
dataPath=$2
columns=`hive -e "use database;desc $table";`
# 拼接sql
sql="select"
#awk -F" "表示用空格分隔   -F fs                        --field-separator=fs    grep -v 表示过滤
for column in `echo "$columns"| awk -F" " '{print $1}' | grep -v "col_name" | grep -v "pt_date" | grep -v "pt_hour" | grep -v "#"`
do
        sql="$sql $column,"
done
len=${#sql}
sql="use database;insert overwrite local directory '$dataPath' row format delimited fields terminated by '\t' ${sql:0:$len-1} from $table where pt_hour = ${pt_hour}  "

echo "$sql"
hive -e "$sql"

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条