ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

5 分钟接通 Metabase API:新手从 0 到 1 完整指南

5 分钟接通 Metabase API:新手从 0 到 1 完整指南 5 分钟接通 Metabase API新手从 0 到 1 完整指南【免费下载链接】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 API 就是为这类重复劳动准备的一段脚本代替手动导数查询、建仪表盘、同步数据都能用代码完成。这篇指南带你走完第一条真实调用并把最常见的坑一次说清。先判断你的情况值不值得接 API不是所有需求都需要写代码。对照下面三点命中两条以上再接数据动作周期性重复每天/每周导出报表、定时同步一份数据数据要流进其他系统业务平台、内部工具、自动化流水线需要程序化批量管理内容批量建卡、批量调权限如果只是自己偶尔看一眼图表网页界面就够了不必接 Metabase API 调用。动手前检查清单确认版本号CSV 上传接口需要v0.55.0MBQL 5 完整支持需要v0.57.0低版本先升级确认服务端口可访问默认3000接口文档在服务的/api/docs路径用管理员账户登录进入 管理 人员生成 API 密钥并记下过期时间给不同用途发不同密钥报表脚本一把、内部工具一把出事了能单独吊销密钥只放后端或环境变量别写进前端页面源码——它等同于这个账号的完整权限在终端用一条请求试通连通性再开始写正式代码第一次调用拿到第一条数据用curl打通 Metabase 数据查询接口。/api/dataset是取数入口body 里的query就是 MBQLMetabase 自己的查询描述格式可以理解为不用写 SQL 的查询curl -s http://localhost:3000/api/dataset \ -H Content-Type: application/json \ -H X-Metabase-Session: 你的密钥 \ -d { database: 1, type: query, query: { source-table: 2, aggregation: [[count]] } }逐段说明X-Metabase-Session请求头携带密钥等价于用这个账号登录source-table填表 IDdatabase填数据源 ID——两个 ID 都在响应里回显第一次可以直接从网页界面的网络请求里抄成功时返回 JSON核心是data含columns、rows和status拿到status: completed和一行数据说明链路通了。三个高频业务场景拆解场景一定时导报表到 CSV要解决什么每天 8 点自动产出一份问题card的结果文件不再手动点导出。关键请求对已有问题调POST /api/card/{card-id}/query/{export-format}把{export-format}换成csv、json或xlsx响应体直接是文件内容。curl -s -o sales.csv \ -H X-Metabase-Session: 你的密钥 \ -X POST http://localhost:3000/api/card/17/query/csv最常见的坑大查询要跑几分钟时接口会先返回409查询还没执行完。脚本里要处理这个状态——稍等后重试或改用查询 ID 轮询别把 409 当失败。场景二把业务数据批量灌进来要解决什么CRM 里的一批客户名单直接变成 Metabase 里可查询的表而不是靠人手动上传。关键请求POST /api/upload/csv旧接口POST /api/card/from-csv已改名见 API 变更日志提交 CSV 文件并指定目标集合即可。最常见的坑列名对不上语义类型导入后字段全变文本求和、排序全废。导入前先在网页界面手动传一次同结构的文件确认列类型正常再让脚本复制这套参数。场景三用代码建仪表盘要解决什么给每个区域自动生成一套同构仪表盘手动建太慢。关键请求POST /api/dashboardbody 只给name和description就能创建再按需补parameters仪表盘级过滤器如按 region 筛选和卡片位置。创建成功返回id和created_at后续往上面挂卡片都用它。最常见的坑只建了空壳却忘了挂卡片和设归属集合仪表盘建出来是个空白页还得再调卡片接口补全。接入你自己的页面下面是最短完整链路取数 → 校验 → 渲染成表格。浏览器直接发请求时注意跨域生产环境建议走自己后端的代理转发。async function loadReport() { const res await fetch(http://localhost:3000/api/dataset, { method: POST, headers: { Content-Type: application/json, X-Metabase-Session: KEY, // 仅示例正式环境走后端代理 }, body: JSON.stringify({ database: 1, type: query, query: { source-table: 2, breakout: [[field, 12, null]], aggregation: [[sum, [field, 16, null]]], }, }), }); const payload await res.json(); if (payload.status ! completed) throw new Error(payload.status); const [cols, ...rows] payload.data.rows; document.querySelector(#tbl).innerHTML rows .map((r) tr${r.map((v) td${v}/td).join()}/tr) .join(); }breakout是分组维度aggregation是聚合指标rows第一行是列名后面才是数据行。渲染图表同理把列名、数值映射给任意前端图表库即可。踩坑速查现象返回 401之前明明能用。原因密钥过期或被管理员吊销。处理到 管理 人员 重新生成更新密钥配置按用途分发的密钥此时正好能定位是哪条链路在用它。现象返回 403权限看着没问题。原因v0.50.0 起旧data权限拆成了view-data和create-queries两把钥匙老配置可能只授了其中一把。处理调GET /api/permissions/graph看权限图谱确认当前账号两个键都有值。现象查询接口返回 409不是报错信息。原因Metabase 还在跑这条查询属于进行中而非失败。处理脚本加重试或轮询查询 ID并把超时阈值放宽到能覆盖最慢的那条报表。现象source-table或field的 ID 填了却报字段找不到。原因字段 ID 是某表下的字段换了表 ID 就不通用直接从网页界面网络请求里复制的 payload 最容易犯这个错。处理用GET /api/tables/{id}核对字段 ID 与表的归属关系或干脆固定从一次成功查询的响应里取 ID。现象列表接口一次拉几千条页面卡住。原因没做分页全量返回。处理列表类接口带上page和limit参数控制单次返回量。跑通第一条查询后剩下就是按场景套模板的事。参考资料完整接口定义docs/api.json交互式文档在服务的/api/docs版本变更docs/developers-guide/api-changelog.md上传相关说明docs/databases/uploads.md【免费下载链接】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),仅供参考
返回列表