获取hive/impala表下表所有分区
·
获取hive元数据中每个表的分区信息例如aa表的分区是day=3030/hour=33,bb表的分区是spty=09 mysql中版本是5.7的不适合用开窗函数,通过脚本实现获取这个样例,目录是根据这个脚本获取的分区信息,然后在删除hive历史分区的时候实现自动化,在有些场景下,业务把表下的文件移走,但是元数据没有清理,需要统计所有表的分区信息,但是数量大了,不好一个个找
```sql
#!/bin/bash
MYSQL_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_NAME
FROM
TBLS tbl
JOIN
PARTITIONS par ON tbl.tbl_id = par.tbl_id
WHERE
tbl.TBL_NAME = '$table_name'
LIMIT 1;
" >> "$OUTPUT_FILE" 2>&1 # 将标准输出和错误均追加到文件
echo "" >> "$OUTPUT_FILE" # 添加空行分隔
done
更多推荐


所有评论(0)