You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:25:00