来自名称对的实体关系图,Redshift
Entity Relationship Diagram from Name Pairs, Redshft
我正在交出一个拥有大量视图的 Redshift 数据库。我想可视化它们的依赖关系。
我制作了下面的 select,收到了 ~500 行,前两列显示了两个相关实体的名称。
SELECT
dependent_view.relname as dependent_entity_name
, source_table.relname as entity_name
, source_table.relkind as entity_type
, count(distinct pg_attribute.attname) as joined_column_count
FROM pg_depend
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid
AND pg_depend.refobjsubid = pg_attribute.attnum
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE
source_ns.nspname = 'public'
AND pg_attribute.attnum > 0
GROUP BY 1,2,3
ORDER BY 1,2;
我要
- 图表与
- 每个唯一实体名称 1 个节点
- 每行连接两个相关节点的 1 条线。
- 使用 Draw.io 或类似
中的结果
我不要
- 手动绘制
我试过了
- 使用 Smartdraw - 绘制没有连接的实体
- 使用 VisualParadigm - 崩溃
- ModelXtractor - 对 pg_class_info
的权限被拒绝
有什么办法可以实现吗?现有的软件工具或脚本?
当然有办法生成它。但是,图表中的大量元素可能会使其无法读取和使用。
我的第一次尝试是 plantuml。格式很简单,如果它失败了,你很快就会失败。
以更一般的方式,这是一个经典的图形可视化问题,具有节点和边。因此,您也可以使用更专业的图形可视化算法,例如使用 force-directed layout,其中 self-organizes 节点,并快速识别位于许多相关组中心的“中心”。优点是这些算法旨在呈现比
几百个关系。
如果您不想深入研究 Fruchterman-Reingold 算法或类似替代方案的复杂性,您可以使用一些库(您现在有一些搜索词)甚至 open-source 工具,例如作为 Gephi.
我正在交出一个拥有大量视图的 Redshift 数据库。我想可视化它们的依赖关系。
我制作了下面的 select,收到了 ~500 行,前两列显示了两个相关实体的名称。
SELECT
dependent_view.relname as dependent_entity_name
, source_table.relname as entity_name
, source_table.relkind as entity_type
, count(distinct pg_attribute.attname) as joined_column_count
FROM pg_depend
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid
AND pg_depend.refobjsubid = pg_attribute.attnum
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE
source_ns.nspname = 'public'
AND pg_attribute.attnum > 0
GROUP BY 1,2,3
ORDER BY 1,2;
我要
- 图表与
- 每个唯一实体名称 1 个节点
- 每行连接两个相关节点的 1 条线。
- 使用 Draw.io 或类似 中的结果
我不要
- 手动绘制
我试过了
- 使用 Smartdraw - 绘制没有连接的实体
- 使用 VisualParadigm - 崩溃
- ModelXtractor - 对 pg_class_info 的权限被拒绝
有什么办法可以实现吗?现有的软件工具或脚本?
当然有办法生成它。但是,图表中的大量元素可能会使其无法读取和使用。
我的第一次尝试是 plantuml。格式很简单,如果它失败了,你很快就会失败。
以更一般的方式,这是一个经典的图形可视化问题,具有节点和边。因此,您也可以使用更专业的图形可视化算法,例如使用 force-directed layout,其中 self-organizes 节点,并快速识别位于许多相关组中心的“中心”。优点是这些算法旨在呈现比 几百个关系。
如果您不想深入研究 Fruchterman-Reingold 算法或类似替代方案的复杂性,您可以使用一些库(您现在有一些搜索词)甚至 open-source 工具,例如作为 Gephi.