Spark SQL如何精简获取表与视图的COMMENT注释信息
Spark 精简获取表/视图COMMENT注释方案
我们可以在创建Spark表或视图时添加用于描述的COMMENT注释,示例来自Spark官方文档:
CREATE TABLE student (id INT, name STRING, age INT) USING CSV COMMENT 'this is a comment' TBLPROPERTIES ('foo'='bar');
核心需求
以精简格式获取上述注释:
精简格式指返回结果仅(或几乎仅)包含表名和对应的表描述注释,不返回冗余的列类型、其他表属性等无关信息,效果类似
SHOW TABLES/SHOW VIEWS返回结构,仅额外增加注释字段列。
已验证无效的命令
以下命令经测试无法满足精简获取注释的需求:
DESCRIBE student DESCRIBE EXTENDED student SHOW CREATE TABLE student DESCRIBE DETAIL student -- 仅Databricks环境支持 SHOW VIEWS FROM default -- 不返回视图描述字段 SHOW TABLES FROM default -- 不返回表描述字段
可行方案
- 开箱即用方案(Spark 3.3及以上版本)
Spark 3.3版本开始原生支持扩展SHOW TABLES/SHOW VIEWS的返回字段,执行时添加EXTENDED关键字即可直接拿到注释:
返回结果包含命名空间、表/视图名、是否临时表、注释四个字段,无多余冗余信息,完全匹配需求。-- 获取指定库下所有表及对应注释 SHOW TABLES EXTENDED FROM <你的库名>; -- 获取指定库下所有视图及对应注释 SHOW VIEWS EXTENDED FROM <你的库名>; - 低版本兼容方案(Spark 2.x/3.0~3.2)
低版本Spark可直接查询内置元数据的information_schema.tables视图提取注释,返回结构同样精简:
如果需要获取会话级临时视图的注释(临时视图元数据不会持久化到information_schema),可通过Spark Catalog API在代码侧查询,Scala实现示例:SELECT table_name, comment FROM information_schema.tables WHERE table_schema = '<你的库名>' -- 查普通表保留下方条件,查视图替换为 table_type = 'VIEW' AND table_type = 'BASE TABLE';val spark = org.apache.spark.sql.SparkSession.active // 替换为目标库名,临时视图传空字符串即可 spark.catalog.listTables("<你的库名>") .select("name", "description") .show()
内容的提问来源于stack exchange,提问作者YFl
相关产品推荐
相关产品推荐

