如何在Snowflake中导出Schema、表、列及其依赖为ER图?
在Snowflake生成ER图(含Schema、表、列及依赖)的实现方案
Snowflake本身没有内置的ER图生成功能,但不管是用第三方工具,还是通过DBT脚本,都能实现你要的效果:
一、快速方案:Snowflake元数据+第三方ER工具
直接查询Snowflake的INFORMATION_SCHEMA视图拿到所有元数据,导出后导入ER工具自动生成:
- 提取表和列结构:从
information_schema.columns获取schema名、表名、列名、数据类型、是否可为空等信息 - 提取外键依赖:关联
table_constraints、key_column_usage、constraint_column_usage视图,筛选FOREIGN KEY类型的约束 - 将查询结果导出为CSV/JSON格式,导入DBeaver、ERStudio、Lucidchart这类工具,它们能自动识别依赖关系生成类似示例的ER图
二、用DBT脚本实现的步骤
如果你想用DBT来完成,核心思路是通过DBT提取元数据,再转换为ER图支持的格式:
- 编写DBT查询提取元数据
在DBT中新建模型,通过SQL查询Snowflake系统视图收集所需信息:
-- 提取表与列的基础信息 SELECT table_schema, table_name, column_name, data_type, is_nullable FROM information_schema.columns WHERE table_schema = '你的目标Schema名称' -- 提取外键依赖关系 SELECT tc.table_schema, tc.table_name, kcu.column_name AS local_column, ccu.table_schema AS foreign_schema, ccu.table_name AS foreign_table, ccu.column_name AS foreign_column FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = '你的目标Schema名称'
执行dbt run后,可将结果导出为JSON/YAML文件或直接读取DBT目标目录中的数据。
- 转换为ER图可渲染格式
编写简单的Python/Shell脚本,将DBT输出的结构化数据转换成Mermaid、PlantUML这类支持可视化的ER图语法。比如生成Mermaid代码示例:
erDiagram CUSTOMER ||--o{ ORDER : "下单" ORDER ||--|{ LINE_ITEM : "包含" CUSTOMER { string customer_id PK string 姓名 string 邮箱 } ORDER { string order_id PK string customer_id FK date 下单日期 }
- 渲染生成可视化ER图
将生成的代码导入Mermaid Live Editor、VS Code的Mermaid插件等工具,即可直接查看ER图,也可导出为图片文件。
注意事项
- 确保DBT使用的Snowflake账号拥有
INFORMATION_SCHEMA视图的访问权限 - Snowflake的外键为可选约束,若未显式定义外键,系统视图将无法查询到依赖关系,需通过命名规范或其他方式手动补充
- 若需包含视图、存储过程等对象的依赖,可扩展查询
information_schema.views、information_schema.routines等视图
内容的提问来源于stack exchange,提问作者Iuri de Araújo Sampaio
相关产品推荐
相关产品推荐

