获取hive/impala表下表所有分区
获取hive元数据中每个表的分区信息例如aa表的分区是day=3030/hour=33,bb表的分区是spty=09 mysql中版本是5.7的不适合用开窗函数,通过脚本实现获取这个样例,目录是根据这个脚本获取的分区信息,然后在删除hive历史分区的时候实现自动化,在有些场景下,业务把表下的文件移走,但是元数据没有清理,需要统计所有表的分区信息,但是数量大了,不好一个个找
```sql
#!/bin/bashMYSQL_HOST="localhost" # Hive元数据库地址(如远程:192.168.1.100)
MYSQL_PORT="3306" # 端口(默认3306)
MYSQL_USER="root" # 元数据库用户名(如:hive)
MYSQL_DB="hive2" # 元数据库名(默认hive)
MYSQL_PASS="123456"OUTPUT_FILE="/home/aa.txt"TABLE_NAMES=("AA" "BB")for table_name in "${TABLE_NAMES[@]}"; do#echo "--------------------------------------" >> "$OUTPUT_FILE"#echo "表名:$table_name" >> "$OUTPUT_FILE"#echo "--------------------------------------" >> "$OUTPUT_FILE"# 执行MySQL查询(取该表的一条分区记录)mysql -h"$MYSQL_HOST" -P"$MYSQL_PORT" -u"$MYSQL_USER" -p"$MYSQL_PASS" "$MYSQL_DB" -e "SELECT par.PART_ID,tbl.TBL_NAME,par.PART_NAMEFROM TBLS tbl JOIN PARTITIONS par ON tbl.tbl_id = par.tbl_idWHERE tbl.TBL_NAME = '$table_name'LIMIT 1;" >> "$OUTPUT_FILE" 2>&1 # 将标准输出和错误均追加到文件echo "" >> "$OUTPUT_FILE" # 添加空行分隔
done