项目:metabase/metabase | 星数:49978 | 语言:Clojure | 协议:AGPL | GitHub仓库
更新日期:2026-10-30 · 作者:CodeArts 编辑部
去年我帮一家做电商的公司搭数据看板。最初的做法是运营提需求、我写 SQL、导出 Excel 发群。一个月后我发现自己有三分之一的时间在当人肉取数机。后来换成 Metabase,同样是 49978 星的开源 BI,运营自己点几下就能出图,我只负责把数据源接好、把常用指标定义清楚。
Metabase 的核心价值不是"能画图",而是把查询这件事从工程师手里交出去,同时保留可管控的口径。它用 Clojure 写,支持 MySQL/Postgres/ClickHouse/BigQuery/Snowflake 等几十种数据源,开源版采用 AGPL 协议。
| 工具 | 上手难度 | 适合场景 |
|---|---|---|
| Metabase | 低,非技术用户可自助查询 | 中小团队、内部报表、快速搭建 |
| Superset | 中,需要懂数据模型 | 大数据量、复杂可视化 |
| Grafana | 中,偏指标时序 | 监控、实时运营指标 |
| Tableau/PowerBI | 中高,商业授权 | 企业级分析、预算充足 |
简单判断:业务同学要自己拖拽出图,选 Metabase;要监控服务器和接口指标,选 Grafana;要接 Hive/Spark 跑十几亿行聚合,选 Superset 或商业方案。
# 1. 最快:JAR 单文件 java -jar metabase.jar # 2. 推荐:Docker + 外部 Postgres docker run -d --name metabase \ -p 3000:3000 \ -e MB_DB_TYPE=postgres \ -e MB_DB_DBNAME=metabase \ -e MB_DB_PORT=5432 \ -e MB_DB_USER=mbuser \ -e MB_DB_PASS=你的密码 \ -e MB_DB_HOST=postgres \ metabase/metabase:latest # 3. 云托管(免费试用,之后付费)
强烈建议第二种。默认的 H2 内嵌数据库在并发稍高时就容易出问题,而且备份麻烦——所有问题定义、看板、用户都存在这个文件里,损坏等于重做。换成 Postgres 后备份就是一条 pg_dump。
我们当时踩的坑是"活跃用户"四个字。运营的活跃是"今天登录过",产品的是"今天有下单行为",财务的是"本月有付费"。三个数字在三个表里打架,开会半小时全在争论谁对。
解决办法是在 Metabase 里建 模型(Model),把口径固化下来:
-- 统一活跃用户口径:当日有登录且有有效行为
SELECT
user_id,
DATE(login_at) AS stat_date,
COUNT(DISTINCT session_id) AS session_cnt
FROM user_events
WHERE event_type IN ('login', 'view', 'add_cart', 'pay')
GROUP BY 1, 2
把这个查询保存成 Model,所有人做看板时都从这个 Model 出发,口径就只有一个。后来再开会,没人再争数字——需要新口径就新建一个 Model 并写清楚定义,而不是在现场互相质疑。
| 症状 | 原因 | 处理 |
|---|---|---|
| 看板打开要几十秒 | 每次打开都实时查询 | 开缓存,或改成定时同步 |
| 单个问题查询超时 | 连的是从库但没建索引 | 加索引,别指望 BI 优化 SQL |
| 整体卡顿 | H2 应用库与业务库抢资源 | 应用库换独立 Postgres |
Metabase 的开源版不带定时同步到数据仓库的能力,那属于商业版特性。开源版的替代做法是利用数据库自己的物化视图(Postgres 的 MATERIALIZED VIEW、ClickHouse 的物化视图),让 Metabase 只查汇总表。这一招对千万级以上的表提升非常明显。
开源版有基础的集合权限:按组控制谁能看哪个集合、能否使用原生 SQL 编辑器。这里有个实用建议——只给少数人开放原生 SQL 权限。一旦人人能写 SQL,轻则一条 SELECT * FROM 大表 打满数据库,重则误操作改了数据。给运营同学用图形化查询构建器就足够了。
对外暴露时记得加反向代理和 HTTPS,并且关掉公开分享链接的默认开放——分享出去的看板链接是可以在无登录状态下访问的,里面可能有敏感数据。
开源版包含查询构建、看板、模型、基础权限和告警;商业版增加行级权限、SSO、数据沙箱、定时同步到数据仓库、审计日志等企业能力。中小团队内部报表用开源版基本够。
技术上可以,但不建议。BI 的长查询会占用连接和 CPU,影响业务。推荐连只读从库,或者先做汇总表/物化视图让 BI 只读轻量数据。
管理员设置里的本地化选项可以选择简体中文,报表时区需在管理员设置的本地化中单独指定。注意数据库里存的若是 UTC 时间,展示前要在查询里转换,否则日报会整体错一天。