美文网首页Shell脚本
hive自动化下载数据

hive自动化下载数据

作者: 堂哥000 | 来源:发表于2021-02-09 15:21 被阅读0次

    一、脚本内容

    #!/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自动化下载数据

        本文链接:https://www.haomeiwen.com/subject/qpccxltx.html