HIVE 获取所有分区表的表名 2024-01-11

在迁移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))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容