能否通过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
- 数据库ID:进入数据库管理页面时,URL类似
- 结果格式:接口返回的响应中,
data字段包含了原始查询结果,结构清晰,方便直接在代码中解析处理。
为什么这能满足你的需求
- 你可以把MBQL/SQL查询直接写在代码里,轻松纳入版本控制系统,实现查询逻辑的版本管理
- 完全不依赖Web UI中创建的Question/Card,避免了Question被修改、删除带来的API调用失败问题,隔离性更好
内容的提问来源于stack exchange,提问作者Grokify
相关产品推荐
相关产品推荐

