在迁移HDFS和hive的时候需要拿到所有分区表, 并执行MSCK REPAIR TABLE xxx
这个小脚本可以拿到所有表名
# 指定数据库名
database_name="your_database"
# 切换到指定数据库并获取所有表名
tables=$(hive -e "USE $database_name; SHOW TABLES;")
# 遍历每个表
for table in $tables; do
# 检查表是否为分区表
partitions=$(hive -e "SHOW PARTITIONS $table" 2>/dev/null)
if [ -n "$partitions" ]; then
echo "分区表: $table"
fi
done
echo 语句可以改成MSCK REPAIR TABLE $table ;
复制结果就可以修复所有分区表
spark-shell 会比较快一点
import org.apache.spark.sql.SparkSession
import scala.util.Try
val spark = SparkSession.builder.appName("ListPartitionedTables").enableHiveSupport().getOrCreate()
// 指定数据库名
val databaseName = "your_database"
// 使用 SQL 来确定哪些表是分区表
def isPartitionedTable(tableName: String): Boolean = {
Try(spark.sql(s"SHOW PARTITIONS $databaseName.$tableName").count() > 0).getOrElse(false)
}
// 获取数据库中的所有表
val tables = spark.catalog.listTables(databaseName).collect()
// 过滤出分区表
val partitionedTables = tables.filter(table => isPartitionedTable(table.name))
// 打印分区表名
partitionedTables.foreach(table => println(table.name))