☰
mage-ai 集成 Monday 数据源:配置 api_token、board_limit 与五大 GraphQL 数据流详解
2026/9/25 8:32:48 网站建设 项目流程
  • 数据工程
  • 数据编排
  • ETL
  • 任务调度
  • 批处理
  • 流处理
  • 数据集成
  • 后端

【免费下载链接】mage-ai

🧙 Build, run, and manage data pipelines for integrating and transforming data.

项目地址:https://gitcode.com/gh_mirrors/ma/mage-ai
点击查看免费下载

本篇文章基于开源仓库 mage-ai 中mage_integrations/mage_integrations/sources/monday的官方连接器说明,深入讲解如何在 Mage 数据集成(Data Integration)管道中接入 Monday(monday.com)作为数据源:包括api_token、board_id、board_limit三个核心配置项的作用与取值、API Token 的获取方式,以及该连接器内部通过 GraphQL 查询实现的boards、workspaces、groups、columns、board_views五大数据流(stream)及其分页、Schema 与错误处理机制。阅读本文后,你将能够在自己的 Mage 项目中完整配置并运行 Monday 数据源同步任务。

Monday 数据源在 mage-ai 中的定位

Mage 数据集成框架(mage_integrations)将“源(Source)”定义为“你希望从中加载数据并同步到另一个系统的外部系统”,Monday 就是官方提供的一个 SaaS 类数据源,用于将 monday.com 上的看板(Board)、工作区(Workspace)、分组(Group)、列(Column)和视图(View)等数据抽取出来,供下游数据管道使用。你可以在 docs/data-integrations/overview.mdx 的 “Sources” 一节中看到它与其他数据源的并列关系。

从仓库结构看,该连接器的完整实现位于:

  • 入口与数据加载逻辑:mage_integrations/mage_integrations/sources/monday/init.py
  • HTTP 客户端封装:mage_integrations/mage_integrations/sources/monday/client.py
  • 数据流定义:mage_integrations/mage_integrations/sources/monday/streams.py
  • 各数据流的 JSON Schema:mage_integrations/mage_integrations/sources/monday/schemas/
  • 配置模板:mage_integrations/mage_integrations/sources/monday/templates/config.json

必需配置项:api_token、board_id 与 board_limit

配置 Monday 数据源时,必须提供以下凭据与参数(下表来自连接器 README 与配置模板):

Key描述示例值
api_token用于身份认证的 API Token。abcdefghijklmnopqrstuvwxyz
board_id用于查询看板(board)相关数据的看板 ID。12345678
board_limitboards数据流中每页返回的看板数量。25

其中board_limit在 templates/config.json 中默认值为25,board_id默认为null(即不指定具体看板,由boards查询动态发现)。

三个配置项在源码中的实际作用

  • api_token:在 client.py 中,Client.get_headers()直接以Authorization: <api_token>请求头方式透传给 Monday API,因此该 Token 必须具备读取看板、分组、列、视图等对象的权限范围。
  • board_id:虽然它出现在配置项中,但从源码看,groups、columns、board_views这三个子数据流实际使用的看板 ID 来自父数据流boards动态下发的board_id(见后文“父子数据流”一节),board_id配置项更多用于显式限定查询范围或配合上游配置使用。
  • board_limit:直接影响boards数据流的 GraphQL 查询变量与分页行为。在 streams.py 中,BoardsStream.get_url_params()会将board_limit作为board_limit变量传入查询;同时 get_next_page_token() 判断“本页返回的看板数是否等于board_limit”来决定是否继续翻页,因此调大它可减少请求次数,但需注意不要超过 Monday API 单次查询的看板数量上限。

如何获取 api_token

按连接器 README 的指引,获取 API Token 的官方路径是访问 Monday 开发者文档中的 “Accessing API tokens” 章节(developer.monday.com下/api-reference/docs/authentication#accessing-api-tokens)。基本流程是:

  1. 登录你的 monday.com 账号;
  2. 进入账户管理员设置,找到开发者/API 相关入口;
  3. 创建或复制一个 API Token(仅对管理员可见,且应妥善保管);
  4. 将该 Token 填入数据源配置的api_token字段。

获取 Token 后,你可以直接用它与 Monday GraphQL API 的https://api.monday.com/v2端点交互进行验证——这正是该连接器内部真实调用的 API 地址(见 client.py 的base_url)。

连接器架构与调用链

从源码结构可以梳理出该数据源的完整调用链:

  1. 入口类Monday(Source)(init.py)继承自mage_integrations.sources.base.Source,在初始化时构造Client,并通过load_data()根据stream.tap_stream_id从STREAMS注册表中实例化对应的数据流类。
  2. 客户端Client继承自 mage_integrations/mage_integrations/sources/http/client.py 中的Client基类,重写了base_url与get_headers(),所有请求最终由基类make_request()发出(POST + JSON body,GraphQL 查询以query字段提交)。
  3. 数据流基类BaseStream实现了通用的加载循环:不断以client.request(method='post', body={'query': ..., 'variables': ...})拉取数据,将parse_response()的结果分批 yield 出去,再根据get_next_page_token()判断是否继续翻页,直到没有下一页为止。

值得一提的是,基类make_request()带有@utils.ratelimit(100, 60)限速装饰器(即每 60 秒最多 100 次请求),并默认设置 300 秒的请求超时;同时通过 STATUS_CODE_EXCEPTION_MAPPING 将 400/401/403/404/405/409/429/500/503 等状态码映射为BadRequestError、AuthenticationError、RateLimitError等具体异常。也就是说,配置的 Token 失效(401)或触发 Monday 限流(429)时,Mage 都会抛出对应类型的可读异常,便于在管道日志中快速定位问题。

五大数据流(Stream)详解

STREAMS注册表(streams.py)共注册了 5 个数据流,每个数据流都有对应的 JSON Schema 文件与主键定义:

数据流主键复制键Schema 文件数据内容
boardsid无schemas/boards.json看板及其内嵌的 items(条目)与 column_values
workspacesid无schemas/workspaces.json工作区信息(name、kind、description)
groupsid无schemas/groups.json看板内的分组(title、position、color)
columnsid无schemas/columns.json看板内的列定义(archived、width、type 等)
board_viewsid无schemas/board_views.json看板的视图(name、type、settings_str)

boards:唯一支持分页的顶层数据流

BoardsStream是分页与父子关系的核心。它通过带page和board_limit变量的 GraphQL 查询拉取看板列表:

query ($page: Int!, $board_limit: Int!) { boards(limit: $board_limit, page: $page, order_by: created_at) { id, updated_at, name, description, state, workspace_id, items { id, name, state, created_at, updated_at, column_values { id, title, text, type, value, additional_info } } } }

其分页逻辑为:第一页从page = 1开始,若本页返回的记录数恰好等于board_limit,则page加 1 继续请求,否则视为已到末页、停止翻页。同时,BoardsStream.get_child_context()会把每条看板记录的id作为子数据流的上下文(board_id)下发给groups、columns、board_views。

另外注意post_process()会把看板与 items 的id从字符串转换为整数,而 schemas/boards.json 也相应地将id声明为integer类型。

workspaces:从看板反查工作区

WorkspacesStream的查询会遍历boards节点的workspace字段,取出每个看板所属工作区的id/name/kind/description,并在parse_response()中跳过workspace为null的记录(即未归属任何工作区的看板)。由于它依赖全局看板列表反查,实际含义是“所有可访问看板对应的工作区去重集合”。

groups / columns / board_views:三个父子子数据流

这三个数据流都声明了parent_stream_type = BoardsStream与ignore_parent_replication_keys = True,即它们以boards为父流、按看板逐个查询,各自的 GraphQL 查询通过boards(ids: $board_id)定位具体看板:

  • groups:查询分组的title / position / id / color,post_process()中把position转为浮点数并回填board_id;
  • columns:查询列的archived / id / settings_str / title / type / width,同样回填board_id;
  • board_views:查询视图的id / name / type / settings_str。

这意味着:只要配置了api_token,boards流会自动发现所有可访问的看板,并驱动三个子流完成全量看板元数据抽取,无需手工为每个看板填写board_id配置;board_id配置项在此处更多作为兜底/定向手段存在。

Schema 与数据一致性

每个数据流都在 schemas/ 下提供独立的 JSON Schema,字段类型与实际查询结果严格对应。几个值得注意的类型设计:

  • boards.json中id、workspace_id为integer,updated_at声明为date-time格式字符串,items为宽松对象数组(additionalProperties: true),兼容 Monday items 中动态变化的 column_values;
  • groups.json中position为number(与源码中float()转换一致),board_id声明为number;
  • columns.json与board_views.json的id为string(Monday 的列 ID 与视图 ID 本质上是字符串标识);
  • 所有 Schema 均设置additionalProperties: false约束已定义字段,防止无关字段进入目标表。

主键方面,5 个数据流均以id作为唯一主键(见各流的primary_keys),且均未设置复制键(replication_key = None),因此这些数据流默认按“全量替换/追加”方式同步,适合看板元数据这类低频变化的数据。

在 Mage 中配置并使用 Monday 数据源

  1. 新建数据集成管道:在 Mage 项目中创建一个 Data Integration 类型的管道,Source 选择Monday;
  2. 填写配置:依次填入api_token(必填)、board_id(可选,用于限定看板)、board_limit(默认 25,控制boards流每页拉取数量),可参照 templates/config.json 的结构;
  3. 选择要同步的数据流:勾选boards、workspaces、groups、columns、board_views中需要的流,并选择目标(Destination);
  4. 运行管道:点击运行后,可打开日志观察各流的加载情况;每个流完成后会打印Finish loading data for stream <StreamName>日志(见 streams.py)。

配置或运行时的常见问题排查:

  • 401 AuthenticationError:api_token无效或权限不足,重新在 monday.com 管理后台生成 Token;
  • 429 RateLimitError:请求过于频繁,连接器已内置 60 秒 100 次的限速,可适当调大board_limit减少分页请求次数;
  • boards 流不返回数据:确认账号下有可访问的看板,且 Token 具备对应工作区/看板的读取权限。

小结

Monday 数据源是 mage-ai 数据集成体系中典型的“GraphQL API + 父子流”型连接器:对外只需api_token一个强校验凭据,配合board_limit控制boards流的分页规模,即可自动发现看板并级联抽取groups、columns、board_views与workspaces数据。理解其 streams.py 中的分页判定与子流board_id下发机制,能帮助你在调优同步性能与排查权限问题时事半功倍。

  • 数据工程
  • 数据编排
  • ETL
  • 任务调度
  • 批处理
  • 流处理
  • 数据集成
  • 后端

【免费下载链接】mage-ai

🧙 Build, run, and manage data pipelines for integrating and transforming data.

项目地址:https://gitcode.com/gh_mirrors/ma/mage-ai
点击查看免费下载

相关推荐

上一篇:2025最新PHPWord教程:10分钟上手Word文档自动化
下一篇:Noi浏览器批量提问:1键同步13个AI站点的完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询