尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Apache DataFusion 工作区依赖关系图(Workspace Dependency Graph):图例解读与自动化生成指南

发布时间:2026/9/25 3:23:56

资讯中心
01
ARTICLE

Apache DataFusion 工作区依赖关系图(Workspace Dependency Graph):图例解读与自动化生成指南

Apache DataFusion 工作区依赖关系图(Workspace Dependency Graph):图例解读与自动化生成指南
大数据数据分析后端【免费下载链接】datafusionApache DataFusion SQL Query Engine项目地址https://gitcode.com/gh_mirrors/datafu/datafusion点击查看免费下载Apache DataFusion 是一个基于 Rust 与 Apache Arrow 内存模型实现的内存查询引擎整个项目以 Cargo workspace 的形式拆分为数十个独立 crate如datafusion-common、datafusion-expr、datafusion-optimizer、datafusion-physical-plan等。对于贡献者而言快速理解这些 crate 之间谁依赖谁是阅读源码、评估改动影响面的关键前提。本文以 docs/source/contributor-guide/architecture/dependency-graph.md 为骨架结合仓库中的生成脚本与构建配置系统讲解 DataFusion 工作区依赖图的图例含义、交互式查看方式以及如何用cargo depgraph Graphviz 自动生成并保持其与代码库同步。读完本文你将能够阅读依赖图定位跨 crate 的耦合关系也能在本地一键重新生成这张图。一、什么是 Workspace Dependency GraphDataFusion 的文档站点Contributor Guide → Architecture → Workspace Dependency Graph内嵌了一张描述工作区内部 crate 之间依赖关系的图。它有两条关键约束仅包含内部依赖图中只展示 DataFusion 工作区内部 crate 之间的边诸如Arrow、tokio、sqlparser这类外部 crate不包含在内忽略传递依赖为了保持图的可读性传递依赖transitive dependencies被有意忽略图中只呈现直接的依赖边。从仓库根目录的 Cargo.toml 可以看到工作区成员覆盖了datafusion/core、datafusion/sql、datafusion/optimizer、datafusion/physical-plan、datafusion/physical-optimizer、datafusion/physical-expr、datafusion/functions、datafusion/substrait、datafusion/proto、datafusion-cli、benchmarks、test-utils等 40 余个 crate。依赖图正是以这些成员为节点、以它们之间的[dependencies]、[dev-dependencies]、[build-dependencies]声明为边绘制而成。二、图例如何读懂四种连线原文档为依赖图定义了清晰的图例Legend每条边的颜色和线型对应一类 Cargo 依赖声明线型含义对应的 Cargo 声明黑色实线普通依赖normal dependency[dependencies]蓝色实线开发依赖dev-dependency[dev-dependencies]绿色实线构建依赖build-dependency[build-dependencies]黑色虚线可选依赖optional dependency[dependencies]中标记optional true可通过禁用对应 Cargo feature 移除其中虚线可选依赖最值得关注它意味着该条边可以通过关闭某个 feature 被裁掉。例如datafusion/core的 Cargo.toml 中parquet [datafusion-common/parquet, dep:parquet, datafusion-datasource-parquet]、avro [datafusion-datasource-avro]这类 feature 直接决定了对应数据源 crate 是否被拉入依赖树图上以虚线呈现的边正是这些可通过 feature 开关裁剪的可变依赖。这也是 DataFusion 保持最小依赖可用默认 features 可控设计理念的直观体现。需要强调的是黑色实线/虚线只描述直接依赖。两个 crate 之间即便存在经由第三方 crate 的间接关系也不会在图中画出多余的边。三、交互式图的使用方式文档页面中嵌入的是一张支持交互的 SVG 图docs/source/_static/data/deps.svg该文件为构建产物见下文第四节而非静态截图。它具备以下交互能力平移pan在图上按下鼠标/触控板拖动可漫游整个图缩放zoom滚动鼠标滚轮或触控板即可放大/缩小页面右下角还提供/−两个按钮用于按固定倍率缩放搜索由于 SVG 保留原始文本节点浏览器内可直接通过查找功能定位特定 crate 名称。从源码级看这些交互逻辑由页面内嵌的一段 JavaScript 实现见 dependency-graph.md脚本读取 SVG 的viewBox作为初始状态通过pointerdown/pointermove事件实现抓取式平移通过wheel事件按exp(delta * 0.0015)系数实现平滑缩放并将缩放范围钳制在初始尺寸的 5%initial.width * 0.05到 20 倍initial.width * 20之间防止过度缩放导致迷失。若 SVG 加载失败页面会回退显示 Unable to load dependency graph. 提示而不是渲染空白。这张图通过{eval-rst}的raw:: html指令从_static/data/deps.svg内嵌进页面渲染在带边框和浅色背景的容器中以保证在明暗主题下都可读。四、依赖图如何自动生成脚本源码解析依赖图的唯一官方来源是仓库中的 docs/scripts/generate_dependency_graph.sh其核心命令可概括为cargo depgraph --workspace-only --all-deps --dedup-transitive-deps \ --exclude gen,gen-common \ | dot -GrankdirTB -Gconcentratetrue -Goverlapfalse -Tsvg \ docs/source/_static/data/deps.svg逐项拆解--workspace-only只绘制工作区成员之间的内部依赖这正是仅包含内部 crate约束的实现来源--all-deps同时考虑普通、开发、构建三类依赖对应图例中的黑、蓝、绿三种颜色--dedup-transitive-deps剔除传递依赖保证图面只有直接依赖边——与文档中传递依赖被有意忽略的说明严格对应--exclude gen,gen-common排除仅被内部脚本使用的工具 crate。对应 Cargo.toml 中的datafusion/proto-common/gen与datafusion/proto-models/gen它们由 protobuf 生成、仅服务于 proto 代码生成流程不属于业务依赖关系dot参数-GrankdirTB让图自上而下Top-to-Bottom分层排列-Gconcentratetrue合并平行边、减少视觉杂乱-Goverlapfalse避免节点重叠-Tsvg输出 SVG 格式。脚本还做了三重前置条件检查generate_dependency_graph.sh要求环境中存在cargo、cargo-depgraph缺失时提示cargo install cargo-depgraph以及 Graphviz 的dot命令三者缺一即报错退出。输出路径固定为docs/source/_static/data/deps.svg脚本会自动创建输出目录并最终打印Wrote dependency graph SVG to ...确认成功。从依赖图工具链的生态背景看cargo-depgraph是社区维护的、将 Cargo 依赖关系导出为 Graphviz DOT 文本的标准工具DataFusion 选择它作为生成器正是看重其对 workspace、feature 与依赖类型dev/build/optional的完整表达能力。五、与文档构建流程的集成依赖图能够始终与代码库保持同步关键在于它被接入了文档构建流程。仓库根目录的 docs/build.sh 执行顺序如下set -euo pipefail cd docs scripts/generate_dependency_graph.sh # 第一步重新生成依赖图 make html # 第二步构建 HTML 文档也就是说每次构建文档都会先重新生成deps.svg再编译 Sphinx 文档。由于set -euo pipefail的存在一旦生成失败例如缺少cargo-depgraph整个文档构建会立即中止避免产出过期的依赖图。这正是原文档所说的脚本现已作为docs/build.sh的一部分自动运行的落地实现。在文档目录结构上docs/source/index.rst 将本页注册到 Contributor Guide → Architecture 章节之下使其成为贡献者文档体系的正式组成部分。六、理解图中的节点工作区 crate 一览要真正读懂图还需要对节点crate的职责有基本认知。以仓库根 Cargo.toml 的members列表为准DataFusion 工作区 crate 大致可分为几层核心引擎层datafusion/core对外的主 crate聚合全部能力、datafusion/execution执行上下文与任务调度、datafusion/physical-plan物理执行计划、datafusion/physical-expr物理表达式求值、datafusion/physical-optimizer物理层优化逻辑与优化层datafusion/expr、datafusion/expr-common逻辑表达式、datafusion/optimizer逻辑层优化规则SQL 层datafusion/sqlSQL 解析为逻辑计划的转换依赖sqlparser函数层datafusion/functions、datafusion/functions-aggregate、datafusion/functions-nested、datafusion/functions-window、datafusion/functions-table及其对应的-common包数据源层datafusion/datasource及datasource-{arrow,avro,csv,json,parquet}目录与会话层datafusion/catalog、datafusion/catalog-listing、datafusion/session互操作与扩展层datafusion/proto、datafusion/proto-common、datafusion/proto-modelsprotobuf 序列化、datafusion/substraitSubstrait 计划规范、datafusion/ffiC ABI 互操作、datafusion/sparkSpark 兼容层支撑与应用层datafusion/common、datafusion/common-runtime、datafusion/macros、datafusion-cli命令行、datafusion-examples、test-utils、benchmarks、xtask、datafusion/sqllogictest、datafusion/wasmtest、datafusion/doc。观察这张图时一个值得注意的模式是datafusion/common与datafusion/expr-common这类-commoncrate 承担了被大量下游共享的基础类型角色因此通常是图中入度最高被依赖最多的节点而datafusion/core则是聚合点出边覆盖绝大多数 crate。从源码结构看这种基础包下沉、聚合包上浮的分层是 DataFusion 避免循环依赖、支持按需裁剪 feature 的工程基础。七、实战在本地重新生成依赖图如果你想在本地复现或更新这张图可按以下步骤操作以仓库根目录为工作目录安装依赖工具cargoRust 工具链仓库要求 MSRV 1.94.0见 Cargo.tomlcargo-depgraph执行cargo install cargo-depgraphGraphviz安装后确保dot命令可用如 Debian/Ubuntu 的graphviz包。运行生成脚本bash docs/scripts/generate_dependency_graph.sh脚本会检查上述三个前置命令随后在工作区根目录执行cargo depgraph ... | dot ...最终将 SVG 写入docs/source/_static/data/deps.svg。验证输出确认终端打印Wrote dependency graph SVG to docs/source/_static/data/deps.svg然后用浏览器打开该 SVG 即可查看对应文档页右上角 Open SVG 链接所指向的文件。可选手动定制若想探索不同视角可直接改造脚本第 84-94 行的管道命令例如去掉--dedup-transitive-deps查看完整传递依赖或调整--exclude列表改变排除范围。注意这些改动仅用于本地实验仓库内的正式产物以脚本默认参数为准。八、维护注意事项不要手动编辑deps.svg它是构建产物。任何对[dependencies]、[dev-dependencies]、[build-dependencies]或 feature 声明的修改都应通过重新运行 docs/scripts/generate_dependency_graph.sh 反映到图上新增大类依赖时留意图例为 crate 新增依赖后图中会相应出现黑/蓝/绿实线若新增的是optional true的依赖则表现为虚线说明它受 feature 控制、可在裁剪配置中移除保持内部依赖 直接依赖两个约束新增外部 crate 或间接依赖不会、也不应出现在图中图的可读性正建立在这两条约束之上文档构建已内置同步机制由于 docs/build.sh 在make html之前强制执行生成脚本正常情况下提交代码时无需手动刷新文档但本地预览文档前仍建议确认工具链cargo-depgraph、dot已安装否则文档构建会因前置检查失败而中止。总而言之Workspace Dependency Graph 是 DataFusion 贡献者理解模块边界、评估依赖耦合与 feature 裁剪影响的高效入口黑/蓝/绿/虚线四种图例精确映射了 Cargo 的依赖类型交互式 SVG 支持自由浏览而generate_dependency_graph.sh与docs/build.sh的流水线则保证了这张图永远与代码库实际状态一致。掌握它你就能在数秒内建立起对整个 DataFusion 工程结构的全局认知。赞分享大数据数据分析后端【免费下载链接】datafusionApache DataFusion SQL Query Engine项目地址https://gitcode.com/gh_mirrors/datafu/datafusion点击查看免费下载相关推荐Hugo 依赖关系图dependency graph完全指南读懂 hugo mod graph 输出的模块网络Hugo 依赖关系图dependency graph完全指南读懂 hugo mod graph 输出的模块网络 导读 本文围绕 Hugo 官方术语表中的开发工具前端CLI如何用dependency-cruiser生成惊艳的依赖关系图如何用dependency cruiser生成惊艳的依赖关系图 想要快速理解复杂JavaScript项目的架构dependency cruiser是您的最佳选开发工具静态分析代码质量读懂 AG Kit 依赖图谱Workflow → Agent → Skill 依赖关系的生成机制与阅读指南读懂 AG Kit 依赖图谱Workflow → Agent → Skill 依赖关系的生成机制与阅读指南 .agents/DEPENDENCY_GRAPH.人工智能AI 技能上一篇用PyTorch3D实现机器人抓取从3D感知到精准操作的革命下一篇3个颠覆性功能解析91160-cli智能医疗挂号工具如何改变就医体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。