进阶 dagster.io 2026-10-10 01:48:56 · 6 阅读

第30章 Dagster 1.1 发布:声明式调度、多资产调度与 SDA 分区

Dagster 1.1 发布:支持声明式调度、多资产调度及 SDA 分区

此外,还包含 Secrets 管理、Dagit 增强功能、集成更新等。 我们很高兴发布 Dagster 1.1 版本,主题为“Thank U, Next”。

这是一个重大更新。它引入了对声明式、基于资产的调度的支持,并大幅优化了 Fivetran、Airbyte 和 dbt Cloud 集成。我们在 12 月 7 日的 Community Day 更新中分享了这些增强功能,你可以在这里观看精彩片段。

Software-defined Assets 有什么新特性?

针对数据资产的声明式调度

声明式、基于资产调度是一种原则性的变更管理方式。它将每个数据资产建模为其前驱函数,并根据你希望数据保持的最新程度来调度工作。

关于声明式调度的详细介绍请阅读我们的博客文章,使用声明式调度搭配 software-defined assets 的实战指南也已上线,以下是部分亮点:

声明式调度将显著提升资产操作的效率。你只需在资产层面声明资产的更新频率(即“freshness policy”),Dagster 会据此反向推导。

随着源代码和上游数据的变化,更新将在资产图中级联发生,具体是立即还是延迟执行,取决于其所支持的数据产品的需求。

新的资产对账传感器(asset reconciliation sensor)会自动物化从未被物化过的资产,或在自上次物化以来上游资产发生变化时重新物化资产。它也适用于分区资产。你可以使用 `build_asset_reconciliation_sensor` 构建该传感器。

你可以为任何 software-defined asset 添加 `FreshnessPolicy`,以指定你期望该资产的最新程度。你可以在 Dagit 中查看每个资产的新鲜度状态,使用 `@freshness_policy_sensor` 在资产未达到目标时发出警报,并使用 `build_asset_reconciliation_sensor` 创建传感器,基于新鲜度策略自动启动运行以物化资产。

你现在可以为 asset ops 和 source assets 添加版本控制,以便追踪哪些资产已过期。这可以通过为 software-defined assets 分配 `op_version` 或为 SourceAssets 分配 `observation_fns` 来实现。当一组资产以这种方式进行版本控制时,其“上游已变更”状态将基于上游版本是否发生变化,而不是基于上游资产是否已被重新物化。你可以启动仅物化过期资产的运行。

自定义调度:多资产支持

一个备受期待的功能是能够监控多个资产状态的传感器。现在,借助新的 `@multi_asset_sensor` 装饰器,你可以定义基于多个资产物化事件触发的自定义传感器。类似地,通过 `@sensor` 和 `SensorDefinition` 上新增的 `asset_selection` 参数,你现在可以定义直接针对特定资产集合(而非 job)的传感器。

其他 SDA 改进:

* SDA 现在支持分区,允许你启动单个分区的物化,并在 Dagit 中按分区查看物化历史。在此版本中,你可以为 Software-defined Assets 创建多维分区。在 Dagit 中,你可以按维度提供范围来筛选和物化特定分区,并按维度查看物化记录。 * 通过以 Python 对象形式加载资产,我们在 Jupyter notebooks 中进行探索性数据分析变得更加容易。这是通过 `RepositoryDefinition` 和 `load_asset_value` 方法实现的。

本地开发的环境变量支持:

* 轻松使用环境变量进行本地开发:在此最新版本中,`.env` 文件包含的环境变量将自动注入到任何运行的 Dagster 代码环境中。 * 附注:Dagster Cloud Serverless 也发布了一项新功能,允许直接在 Dagster Cloud UI 中管理 Secrets 和其他环境变量。我们在 Community Day 回顾文章中对此功能进行了解说。

Dagit (Dagster UI) 增强功能

概览页面 概览页面是实时运行时间线的新之家,帮助你了解整个部署中所有 jobs、schedules、sensors 和 backfills 的状态。时间线现在按 code location 分组,并显示每个组的运行状态汇总。你还可以预览未来的计划任务何时运行。       您的浏览器不支持视频标签。       Dagit - 显示新的概览页面。      

部署页面 新的部署页面帮助你快速管理 Dagster 实例及其所有 code locations。在这里,你可以监控每个 code location 的状态,查看其源代码,并浏览其中的所有定义。当拥有数千个定义时,重新架构的定义视图加载速度显著加快。

在 Dagster Cloud 中,你可以直接使用 UI 中的新入门模板向部署添加新的 Code Location。创建新的 Dagster 项目变得非常简单:只需选择一个模板,连接 GitHub,然后点击“Deploy”。你还可以在部署页面直接管理和设置环境变量。       Dagit - 显示新的部署页面。       Dagit - 显示 Dagster Cloud 的新快速入门模板。      

资产图 资产图经过重新设计,更好地利用颜色来传达资产健康状况。新的状态指示器让你轻松发现缺失和过期的资产(即使在大型图中也能做到),并且随着显示的资产被物化,UI 会实时更新。       您的浏览器不支持视频标签。       Dagit - 显示重新设计的资产图。      

资产详情页面 资产详情页面经过重新设计,并引入并排 UI,便于检查事件元数据。分区视图中的彩色时间线允许你拖选时间范围,快速检查元数据和状态。新视图还支持跨多个维度分区的资产。       Dagit - 显示新的资产详情页面。      

集成更新

* `dagster-dbt` 现在支持从你的 dbt Cloud jobs 生成 software-defined assets。 * `dagster-airbyte` 和 `dagster-fivetran` 现在支持使用 `load_assets_from_airbyte_instance` 和 `load_assets_from_fivetran_instance` 自动从你的 ETL 连接生成资产。 * 新的 `dagster-duckdb` 集成:`build_duckdb_io_manager` 允许你构建一个 I/O manager,用于在 DuckDB 中存储和加载 Pandas 及 PySpark DataFrames。

结语...

欲了解此版本的更多细节,请查看变更日志、发布说明和迁移指南。

特别感谢社区中为此版本做出贡献的每一位:

Adam Bloom Akan72 Binhnefits C0DK Daniel Gafni Nick Vazz ReidAb Roeij zyd14

有反馈或疑问?请在 Slack 或 Github 上发起讨论。 有兴趣加入我们?请查看我们的开放职位。 想了解更多类似内容?请关注我们的 LinkedIn。

评论 (0)