在Unity Catalog中用PySpark批量获取指定非序列表的记录数
PySpark实现Unity Catalog多表行数统计(等价于指定SQL效果)
需求说明
需要一次性统计Unity Catalog中多个无关联表的记录数,返回包含TableName(表名)和RecordCount(记录数)的DataFrame,并按记录数降序排列,尽量通过单条命令完成。
方法一:直接执行原生SQL(与示例逻辑完全对齐)
如果习惯SQL写法,可直接通过PySpark执行原SQL语句,效果和示例完全一致:
from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() # 执行SQL并获取结果DataFrame result_df = spark.sql(""" SELECT * FROM ( SELECT 'TableABC' AS TableName, COUNT(*) AS RecordCount FROM CatalogName.SchemaName.TableABC UNION ALL SELECT 'TableXYZ' AS TableName, COUNT(*) AS RecordCount FROM CatalogName.SchemaName.TableXYZ UNION ALL SELECT 'TableMNQ' AS TableName, COUNT(*) AS RecordCount FROM CatalogName.SchemaName.TableMNQ ) a ORDER BY RecordCount DESC """) # 查看结果 result_df.show()
方法二:PySpark API动态生成(适合多场景扩展)
如果需要处理大量表,用API动态生成统计逻辑更高效,无需重复编写SQL片段:
from pyspark.sql import functions as F # 定义Unity Catalog中的表全路径列表 tables = [ "CatalogName.SchemaName.TableABC", "CatalogName.SchemaName.TableXYZ", "CatalogName.SchemaName.TableMNQ" ] # 单条链式命令生成结果DataFrame result_df = ( spark.unionAll([ spark.read.table(table) .select(F.lit(table.split('.')[-1]).alias("TableName"), F.count("*").alias("RecordCount")) for table in tables ]) .orderBy(F.col("RecordCount").desc()) ) # 查看结果 result_df.show()
注:如果需要将表的完整路径(如
CatalogName.SchemaName.TableABC)作为TableName,只需把F.lit(table.split('.')[-1])替换为F.lit(table)即可。
注意事项
- 确保SparkSession已正确配置Unity Catalog访问权限,否则会出现表不存在的权限错误。
- 两种方法最终返回的DataFrame结构与示例SQL结果完全一致,均按
RecordCount降序排列。
内容的提问来源于stack exchange,提问作者Raj Singh Dhanjal
相关产品推荐
相关产品推荐

