读取hive的表结构,生成带comment的视图建表语句

 

### 读取hive的表结构,生成带comment的视图建表语句
# 读取配置文件中的表并进行遍历
grep -v '^#' tablesFile|while read tableName
do
    status=1
    viewName=$(echo ${tableName}|sed "s/^dwd_/dwd_cms_out_l_/i"|sed "s/^dws_/dws_cms_out_l_/i"|sed "s/^ads_/ads_cms_out_l_/i")
    echo "-- tableName: ${tableName} | viewName: ${viewName}"
    # 查询HIVE中的表结构
    hive -e "desc db_name.${tableName}" > desc_${tableName}
    # 将\t处理成|
    perl -i -npe 's/\x09/|/g' desc_${tableName}
    # 判断是否分区表
    if [ $(grep '^| | ' desc_${tableName}|wc -l) -gt 0 ]
    then
        # 是分区表的处理方法
        start_line=1
        end_line=$((`grep -n "^| | " desc_${tableName}|awk -F':' '{print $1}'|head -1` - 1))
        sed -n "${start_line},${end_line}p" desc_${tableName} > columns_${tableName}
    else
        # 不是分区表的处理方法
        grep -v -E "col_name|WARN" desc_${tableName} > columns_${tableName}
    fi
    
    echo "create view ${viewName} ("
    grep -v -E "col_name|WARN" columns_${tableName}|awk '{print $1,"comment '\''"$3"'\''"}'|sed 's/|//g'|while read line
    do
        if [ ${status} -ne 1 ]
        then
            echo -n "    ,"
            echo "${line}"
        else
            echo "    ${line}"
        fi
        status=$((${status}+1))
    done
    echo ")"
    echo "as"
    echo "select * from ${tableName}"
    echo ";"
done

 

posted @ 2018-12-27 15:31  chenzechao  阅读(1729)  评论(0)    收藏  举报