hive自动化下载数据

一、脚本内容

#!/bin/bash
. /etc/profile
. ~/.bash_profile

# 报错退出
error() {
       if [[ $? != 0 ]]; then
       echo "$@  运行失败"
       #事务回滚机制
       sh ~/bee_u_e.sh "drop table if exists tmp.nidaye_${pt}"
       exit 1
       fi
}

#脚本使用说明
if [[ $1 = help ]];then
  echo "传入参数  表名 +文件名 +要屏蔽的字段名(多个|分割),无需屏蔽参数可设空"
  echo "此脚本仅用于下载\t 分隔带表头文件-- 通过hdfs方式,适合于大数据量下载"
  exit 0
fi


res_table=$1   # 要下载 表名
file_name=$2  # 要下载的文件名
drop_field=$3  # 多个字段 | 分割 ,可为空 -- 要屏蔽字段
pt=`date +%s`

echo "${head_table_sed}"
# 
hive -e "
set hive.support.quoted.identifiers=None;
alter view  tmp.td_mid_view as select  \`(${drop_field})?+.+\` from ${res_table};
create table tmp.nidaye_${pt} ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS textfile  as select * from tmp.td_mid_view "
error "建表失败"
echo "建表完成"

mid_table="tmp.nidaye_${pt}"
mid_table_hdfs="nidaye_${pt}"

# 设置视图方式控制要屏蔽字段
sql="
set hive.resultset.use.unique.column.names=false;
set hive.cli.print.current.db=true;
set hive.support.quoted.identifiers=None;
select  \`(${drop_field})?+.+\` from ${mid_table} limit 0 
"
# 下载表头
hive -e  "$sql"|sed "s/${mid_table_hdfs}.//g"|sed 's/NULL|\\\\N//g' > ${file_name}
error "下载失败"
echo "表头下载成功"
# 下载数据内容
hadoop fs -cat /user/hive/warehouse/tmp.db/${mid_table_hdfs}/*|sed -r "s/NULL|\\\\N//g" >> ${file_name}
error "数据内容下载失败"
# 善后处理
sh ~/bee_u_e.sh "drop table if exists tmp.nidaye_${pt}"
error "清理表失败"
echo "所有参数 $@ : 需清理表:${mid_table}"

二、使用方法

  1. 保存 ESC+wq!
  2. 赋权chmod 775 down_test.sh
  3. 执行 down_test.sh "hive表名" "文件名" "需要屏蔽的表字段(a|b|c)"

你可能感兴趣的:(hive自动化下载数据)