如何在Databricks中将DESC结果转为含JSON列的表?
在Databricks中批量获取多张表的DESC EXTENDED信息并创建视图
你需要将DESC EXTENDED作为数据源嵌入到FROM子句中,再通过UNION ALL合并多张表的结果,以下是可行的写法:
基础版:合并完整JSON结果
如果只需要保留每张表的完整JSON描述,可以直接用以下语句创建视图:
CREATE VIEW mycad.mygovsch.report1 AS SELECT * FROM (DESCRIBE EXTENDED mycad.mysch.mytab1 AS JSON) UNION ALL SELECT * FROM (DESCRIBE EXTENDED mycad.mysch.mytab2 AS JSON) UNION ALL SELECT * FROM (DESCRIBE EXTENDED mycad.mysch.mytab3 AS JSON);
这条语句会生成一个包含json_value列的视图,每一行对应一张表的完整DESC EXTENDED JSON信息。
进阶版:提取表名和Statistics参数
如果需要直接提取你关注的tableName和statistics字段,可以通过JSON解析函数实现:
CREATE VIEW mycad.mygovsch.report1 AS SELECT -- 提取表名 get_json_object(json_value, '$.tableName') AS table_name, -- 提取统计信息(返回JSON格式的结构体) get_json_object(json_value, '$.statistics') AS statistics FROM (DESCRIBE EXTENDED mycad.mysch.mytab1 AS JSON) UNION ALL SELECT get_json_object(json_value, '$.tableName') AS table_name, get_json_object(json_value, '$.statistics') AS statistics FROM (DESCRIBE EXTENDED mycad.mysch.mytab2 AS JSON) UNION ALL SELECT get_json_object(json_value, '$.tableName') AS table_name, get_json_object(json_value, '$.statistics') AS statistics FROM (DESCRIBE EXTENDED mycad.mysch.mytab3 AS JSON);
为什么之前的写法不生效?
DESC EXTENDED是Databricks的元数据查询命令,不属于SQL表达式范畴,因此不能直接嵌套在SELECT或VALUES语句中,必须通过SELECT * FROM (DESCRIBE EXTENDED ...)的形式将其作为数据源来使用。
内容的提问来源于stack exchange,提问作者Peter Krauss
相关产品推荐
相关产品推荐

