Metabase Data Studio 转换作业与运行(Transform Jobs Runs)完整指南

📅 发布时间:2026/9/11 22:37:16
Metabase Data Studio 转换作业与运行(Transform Jobs  Runs)完整指南
Metabase Data Studio 转换作业与运行Transform Jobs Runs完整指南【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase本指南围绕 Metabase Data Studio 中转换作业Transform Jobs与运行Runs两大核心机制展开以**标签Tags**为纽带把散落的转换Transform组织成可按计划批量执行的作业并通过运行历史与失败邮件进行监控。读完本文你将掌握如何给转换打标签、创建与管理按 cron 调度的作业、理解依赖转换的自动纳入与跳过逻辑以及如何利用 Runs 页面和失败通知体系定位问题。Transform 标签作业与转换之间的纽带作业Jobs是转换的定时运行其选择依据是转换身上的标签。也就是说Metabase 的调度模型并非为单个转换单独配一个定时器而是通过标签把一组转换聚合成一个可统一调度的集合。要给一个转换添加标签确保你拥有 编辑转换的权限开源版仅管理员可操作Pro/Enterprise 版需要 Data Analyst 组与对应数据库的转换权限。进入Data Studio Transforms打开目标转换。在转换的Settings页面中为转换添加标签。Metabase 开箱即用提供hourly、daily、weekly、monthly四个标签及其对应的内置作业它们会按照相应频率自动运行。你完全可以删除、重命名这些标签或创建全新的标签在Tags字段中直接输入新标签名并选择Create a tag即可既可以在转换页面操作也可以在作业页面操作。从源码看这些内置标签和作业由built_in_type字段标识。在 transform_job.clj 中translated-name-and-description函数为内置类型提供了本地化名称与描述例如hourly对应 Hourly job、Executes transforms tagged with hourly every hour并在用户编辑后清除内置标记、转为普通作业{:built_in_type nil}。换句话说内置作业与自建作业在存储与调度上完全一致你可以放心地改写它们的名字、描述或计划。作业Jobs的两个组件Schedule 与 Tags作业页面位于Data Studio Jobs。一个作业由两个组件构成二者职责严格分离Schedule计划决定作业何时执行支持内置计划或自定义 cron 表达式例如 每个工作日上午 9:05。计划时间基于 Metabase 的系统时区计算。Tags标签决定作业执行哪些转换与执行时机无关。例如你可以创建一个Weekdays标签把它加到几个转换上再创建一个每个工作日上午 9:05 运行的作业将所有带Weekdays标签的转换一网打尽。作业会运行带任意一个标签的所有转换一个作业可以挂多个标签只要转换带其中任一标签就会被纳入。例如可以创建一个 Weekend job计划在每周六、周日中午运行拾取所有带Saturday、Sunday或Weekend标签的转换。在调度实现层面schedule.clj 展示了完整的 Quartz 集成每个作业对应一个 Quartz Jobmetabase.task.transforms.schedule.job-id与一个 Cron Trigger作业启用时创建触发器停用时删除触发器。时区解析链为report-timezone→ 系统时区 →UTC见 timezone 函数这与你文档中系统时区的说法一致且更精确如果配置了报表时区将优先于系统时区。触发器设置了misfire 处理指令fire-and-proceed如果实例在计划触发时刻不可用如升级或重启期间错过触发恢复后会将错过的触发补跑一次而不是静默丢弃。触发器优先级设为 6高于数据库同步任务保证转换作业优先触发。cron 表达式由CronExpression/validateExpression校验validate-cron-expression创建/更新作业时后端会先做 400 校验非法表达式直接拒绝。作业运行由RunTransforms任务触发标记DisallowConcurrentExecution同一作业不会并发执行并带有一个全局开关若转换功能被禁用transforms-enabled设置触发时会跳过执行并在 task_history 中记录skipped-reason: transforms-disabled。查看与创建作业查看全部作业进入Data Studio点击左侧边栏底部的Jobs。创建新作业的步骤进入Data Studio Jobs。点击右上角 New按钮。指定计划选择内置计划之一或用 cron 语法写自定义计划。从 API 层看创建作业对应POST /api/transform-job端点transform_job.clj请求体包含name、description、schedule、ui_display_typecron/raw原始 cron 或cron/builder图形化构建器默认cron/raw和tag_ids。后端会依次校验 cron 合法性、标签是否存在以及当前用户是否有权创建can-create?成功后写入transform_job表、调用initialize-job!在 Quartz 中注册计划再按传入顺序position写入作业-标签关联。你还可以在作业页面看到该作业将运行哪些转换以及执行顺序详见下文作业的依赖处理。管理作业停用、重新启用与删除停用作业Disable停用不是删除删除是永久性的而停用只是让作业暂不运行直到你重新启用。这在临时暂停转换例如排障时非常有用且不会丢失标签、计划等配置。停用单个作业Data Studio Jobs点击作业名右侧的三个点图标选择Disable。停用全部作业点击作业表格上方的三个点图标选择Disable all。即使停用了全部作业之后新建的作业默认仍是启用状态。底层实现中停用/启用对应deactivate-job!/activate-job!transform_job.clj停用会删除 Quartz 触发器作业定义保留随时可重新挂回计划启用则从存储的计划重建触发器。两个操作都通过 per-job 集群锁cluster lock串行化避免多实例环境下应用库记录与 Quartz 触发器状态不一致。PUT /api/transform-job/active可批量切换所有作业的启用状态并返回{:updated n :failed n}统计每次翻转的结果。需要注意的是停用只影响定时运行通过 API 的手动运行不受active标志限制。重新启用作业Re-enable重新启用单个作业找到作业点击三个点图标选择Re-enable。重新启用全部作业点击表格上方的三个点图标选择Re-enable all。删除作业Delete删除作业不会删除任何转换——转换与作业是两套独立的实体作业只是通过标签引用转换。已删除的作业无法恢复因此如果想暂停而非终结请优先使用停用。删除操作同样在三个点菜单中完成。API 层面为DELETE /api/transform-job/:job-id会同时清理数据库记录与 Quartz 计划。作业的依赖处理自动纳入与自动跳过作业的标签决定了直接请求运行的转换但转换之间可能存在依赖关系一个转换以另一个转换的输出表为数据源。Metabase 会为作业自动补齐依赖作业包含全部依赖转换如果一个转换依赖另一个转换Metabase 会把依赖加入本次作业运行并先执行它——即使该依赖转换并没有被作业的标签命中。例如转换 B 依赖 A那么运行 B 之前 Metabase 会确保 A 是最新的。执行顺序由依赖图DAG决定作业页面会列出全部转换及执行顺序。作业跳过已经是最新的依赖Metabase不会重跑仍然新鲜的依赖避免一个依赖被高频作业反复重建、超出其自身计划的频率。文档中的经典例子转换 A 标daily转换 B 标hourly且 B 依赖 A。A 按自己的 daily 计划运行每小时跑 B 的作业不会每小时重跑 A。一个依赖被跳过需满足以下条件之一在 freshness.clj 的fresh-dep-ids中有精确实现该依赖有自己的标签和作业且自上次成功运行以来这些作业的任何一个计划都没有到点触发过该依赖没有任何标签且它已经成功运行过至少一次。源码实现细节fresh-dep-ids读取每个依赖最近一次成功运行时间再用CronExpression.getNextValidTimeAfter判断上次成功之后、当前时刻之前是否存在计划触发点只要没有任何一个 schedule 在此窗口内触发过该依赖就被视为 fresh 而跳过。从未成功运行过的依赖永远不算 fresh必须执行。此外如果依赖的计划 cron 无法解析会被记录警告并按不新鲜处理保证安全优先。在作业运行器层面jobs.clj 的run-transforms!跳过新鲜依赖默认开启skip-fresh-deps?默认 true只有被直接请求的转换才参与调度被拉入计划但仅作为依赖的转换先按新鲜度过滤新鲜的直接标记为已成功让下游依赖得以继续调度而它们自身不再被提交执行。API 手动运行时可通过run_all参数强制刷新整个计划忽略新鲜度。执行引擎的并发与超时模型run-transforms!还展示了作业运行时的工程细节每个转换在自己的线程上执行分为两个车道laneSQL 转换按transform-run-job-sql-concurrency设置并发执行至少 1Python 转换由于执行器服务是单 worker同一时间只跑一个。依赖失败的转换会级联失败其下游转换不会执行在失败列表中标记为 cascade。同一目标表的两个转换不会并发写入co-writer guard避免 DDL 竞争导致不确定结果。转换有超时保护transform-timeout设置 5 分钟宽限期超时的 worker 会被协作式取消并中断线程该转换按失败处理。协调器coordinator进程会定期心跳每 1 分钟若协调器死亡job run 在心跳过期5 分钟后会被收割reap正在运行的 worker 会被取消避免孤儿进程持续写表。查看作业将运行的转换进入Data Studio Jobs打开某个作业的页面可以看到该作业将运行的每一个转换及其执行顺序。Notes列会告诉你Metabase 何时会跳过某个依赖并标记那些没有自己计划无标签的依赖。对应 API 为GET /api/transform-job/:job-id/transforms返回的每个转换带dependency是否作为依赖被拉入与scheduled是否有活跃作业的计划覆盖它两个标记位。Runs查看转换的运行历史Data Studio Runs左侧边栏底部展示所有过去和当前的转换运行记录——无论来自手动运行还是定时作业。需要留意运行时间以格林尼治标准时间GMT显示与作业计划所用的本地/报表时区不同。点击任意一次运行可查看详情例如错误日志。在运行详情页右侧边栏点击转换名旁的图标可跳转到对应的转换定义。Runs 表格中的Tags列只显示转换自身的标签但本次运行可能与该标签无关另一个不同标签的作业可能因为作业包含所有依赖转换的规则把它带入了运行。从数据模型看一次作业执行对应一行transform_job_run状态枚举started / succeeded / failed / timeout / canceled其中每个成员转换的执行对应一行transform_run通过 parent-run 关联回作业运行jobs.clj 中run-transform!的:parent-run机制。API 端GET /api/transform-job/:job-id/runs提供分页的作业运行历史可按状态、运行方式manual/cron过滤GET /api/transform-job/:job-id/runs/:run-id/transform-runs可查看某次作业运行包含的成员转换运行。正在进行的作业运行还可通过POST /api/transform-job/:job-id/runs/:run-id/cancel取消并会级联请求取消其仍在运行的转换。转换失败时的邮件通知如果你的 Metabase 已配置邮件发送转换失败时会自动通知相关人员包含两种通知形式单个转换失败通知定时作业运行中某个转换失败时Metabase 会给最后一次编辑该转换的人发邮件若其已停用则发给创建者若创建者也不活跃则发给管理员。每封邮件对应一次作业运行。源码逻辑在 jobs.clj优先取最近编辑者按修订历史倒序、仅活跃用户其次创建者最后管理员兜底。只有根因失败会逐个通知因上游失败而连带跳过的下游转换只以汇总计数出现避免雪崩式的重复告警。每日失败摘要Daily digest每天早晨Metabase 给所有管理员发送一封前一日定时作业运行失败或超时的摘要邮件。手动运行不计入摘要如果前一天没有任何定时运行失败则完全不发这封邮件。摘要由独立任务SendTransformFailureDigest驱动notification.cljQuartz cron 为0 0 8 * * ? *每天 08:00按报表时区fallback 系统时区/UTC计算前一个日历日的边界只统计该窗口内run_method cron的失败/超时运行并按作业聚合输出失败次数、首次失败时间与最近一次错误信息。小结Metabase 的转换调度体系可以概括为一条清晰的主线标签Tags聚合转换 → 作业Jobs按 cron 计划驱动 → 依赖图DAG保证顺序 → Runs 记录执行与失败 → 邮件通知兜底。理解标签决定范围、计划决定时机这一核心分工再结合依赖自动纳入与新鲜度跳过两条规则你就能以最小成本把数据流水线编排得既准时又高效。相关源码可继续深入调度与触发器见 schedule.clj运行协调与失败通知见 jobs.clj依赖新鲜度判定见 freshness.clj每日摘要见 notification.clj作业的 REST API 见 transform_job.clj。【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考