You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:45:04