多人用同一個(gè)數(shù)據(jù)庫,有人表名命名不規(guī)范導(dǎo)致視圖和表無法分離開來,當(dāng)想查看那些是表,那些是視圖時(shí),遇到了問題。網(wǎng)上有提供
show views;命令,但是在當(dāng)前的hive版本中正本不支持
主要問題在于兩點(diǎn)
- grep 做過濾默認(rèn)為模糊匹配,需要添加 -w 參數(shù)
- 使用uniq -u 來過濾會(huì)有一部分隱藏文件和其它建的外表(已刪除表)也會(huì)被輸出
代碼如下
#!/bin/bash
. /etc/profile
. ~/.bash_profile
# 報(bào)錯(cuò)退出
error() {
if [[ $? != 0 ]]; then
echo "$@ 運(yùn)行失敗"
#事務(wù)回滾機(jī)制
exit 1
fi
}
if [[ $1 = '' ]];then
echo "請(qǐng)輸入?yún)?shù),腳本使用請(qǐng)輸入 sh cat_view.sh help"
fi
if [[ $1 = help ]];then
echo "傳入?yún)?shù) 數(shù)據(jù)庫名"
echo "功能: 查看某個(gè)數(shù)據(jù)庫下有那些表是視圖, 使用腳本單行串行使用"
exit 0
fi
database_name=$1
org_path="/data/view_file/"
all_table="show tables in ${database_name}"
# 非視圖表寫入文件
file_unview=${org_path}"unview_table_name.txt"
hadoop fs -du -h /user/hive/warehouse/${database_name}.db/|awk -F'/' '{print $6}' > ${file_unview}
error "提取費(fèi)視圖失敗"
# 所有表寫入文件
file_all_table=${org_path}"all_table_name.txt"
sh ~/bee_u_e.sh "${all_table}" > ${file_all_table}
error "提取所有表失敗"
# 輸出視圖表-表名
# 文件2中的行 沒有在文件1中出現(xiàn) ,grep 為文件2 為主 -w 為全匹配
grep -w -F -v -f ${file_unview} ${file_all_table} # 不加-w 則會(huì)模糊匹配,部分視圖與表部分重復(fù),輸出丟失
# cat ${file_unview} ${file_all_table} |sort |uniq -u --- 此方法存在外表和隱藏文件BUG