获取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

 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐