如何编写Shell脚本批量拉取多个Hive数据库所有表的行数
Hive批量统计多库全表行数Shell脚本方案
完整可运行脚本
#!/bin/bash # 定义结果输出文件,方便后续导出查看 RESULT_FILE="./hive_table_row_counts.txt" # 清空上一次的统计结果 > $RESULT_FILE # 遍历匹配命名规则的所有数据库 for db in $(hive -e "show databases like 'the_same_databasename_*';") do echo "========== 开始统计数据库:$db ==========" | tee -a $RESULT_FILE # 先获取当前库所有表名 tables=$(hive -S -e "use $db; show tables;") # 统计当前库表数量 tbl_count=$(echo "$tables" | wc -l) echo "数据库 $db 总表数:$tbl_count" | tee -a $RESULT_FILE # 遍历当前库所有表统计行数 for tbl in $tables do # 执行count查询,-S参数静默输出只返回结果值 row_count=$(hive -S -e "use $db; select count(*) from $tbl;") echo "表 $db.$tbl 行数:$row_count" | tee -a $RESULT_FILE done echo "========== 数据库 $db 统计完成 ==========" | tee -a $RESULT_FILE echo "" | tee -a $RESULT_FILE done echo "所有库表统计完成,结果已保存至 $RESULT_FILE"
关键逻辑说明
- 外层循环:匹配命名规则拉取所有目标数据库名,和你原有逻辑一致
- 内层循环:在每个库中先拉取全表名,逐表执行
count(*)查询获取行数 - 用
tee -a命令同时把结果输出到控制台和本地文件,你不需要额外从PuTTY日志里截取,直接拿生成的txt文件即可
可选优化点
- 如果表数量非常多,可以在count语句前加上你常用的Hive性能参数,例如
set hive.exec.dynamic.partition.mode=nonstrict; - 如果需要统计分区表的特定分区数据,可以把count语句改成
select count(*) from $tbl where dt = '目标分区日期'; - 执行脚本前可以先执行
nohup bash 脚本名.sh &后台运行,避免PuTTY断开导致任务中断
内容的提问来源于stack exchange,提问作者Gdata0data0
相关产品推荐
相关产品推荐

