You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Metabase REST API直接提交MBQL/SQL查询获取原始数据?

直接通过Metabase REST API执行MBQL/SQL查询获取原始数据的方法

当然有!Metabase早就提供了支持直接提交MBQL或SQL查询、无需预先创建Question/Card的REST API,正好能满足你想要的单步调用、版本控制和低依赖需求。

核心API:POST /api/dataset

这个接口是直接执行查询的关键,支持两种查询类型:原生SQL和MBQL,只需在请求体中指定对应的结构即可。

1. 执行原生SQL查询

如果你想用SQL直接查询,请求体结构如下(记得替换占位符为你的实际信息):

{
  "database": 1, // 你的目标数据库ID
  "native": {
    "query": "SELECT id, email, created_at FROM users WHERE created_at >= '2024-01-01' LIMIT 20"
  },
  "type": "native"
}

2. 执行MBQL查询

如果要提交MBQL查询,同样用这个接口,只是请求体换成MBQL结构:

{
  "database": 1,
  "query": {
    "source-table": 3, // 目标表的ID
    "fields": [["field", 4, null], ["field", 5, null], ["field", 6, null]], // 要返回的字段ID列表
    "filter": [">", ["field", 6, null], "2024-01-01"], // 过滤条件
    "limit": 20
  },
  "type": "query"
}

关键注意事项

  • 认证前置:调用这个接口前,需要先通过POST /api/session接口获取会话令牌,然后在请求头中带上X-Metabase-Session: <你的会话令牌>才能正常访问。
  • ID获取:数据库ID、表ID、字段ID可以从Metabase的Web界面URL中找到:
    • 数据库ID:进入数据库管理页面时,URL类似/admin/databases/1,这里的1就是ID
    • 表ID:查看表详情时,URL类似/admin/databases/1/tables/3,这里的3是表ID
    • 字段ID:点击表中的字段查看详情,URL里的数字就是字段ID
  • 结果格式:接口返回的响应中,data字段包含了原始查询结果,结构清晰,方便直接在代码中解析处理。

为什么这能满足你的需求

  • 你可以把MBQL/SQL查询直接写在代码里,轻松纳入版本控制系统,实现查询逻辑的版本管理
  • 完全不依赖Web UI中创建的Question/Card,避免了Question被修改、删除带来的API调用失败问题,隔离性更好

内容的提问来源于stack exchange,提问作者Grokify

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:38:23