MetaBase笔记
近日在研究数据可视化,扒拉了一些BI工具,找来找去,陷入选择困难症。最后发现Metabase安装很方便——直接用java便可以运行。便快速上手,用了几天,感觉良好,有深入学习的必要,特意撰写此文,边学边用。
之前也有用过其他的一些数据可视化工具,如厂内MES系统的Ureport2,帆软的finerepport,因为其定位都是做报表,也就意味着需要对展示数据的细节进行巨细无遗的全面控制才能整出来一个结果。这类软件很相近(一丘之貉般的繁琐),大概的步骤都是:
- 在数据库管理软件(如DBeaver)里测试SQL,
- SQL没问题了再放到报表的模型里,并按照其语法规则配置可控的查询参数;
- 在报表引擎的界面上逐个单元格地配置字段、格式、字体、大小。如果需要进行一些图表的展示,还需要控制表的位置,定义各个轴的参数,维护一套配色规则等等,
- 最后点击渲染。如果报错,就必须回头重新配置报表,往往配置好一个完美的报表需要好几天的时间。
![]() |
![]() |
|---|
尽管磕磕拌拌地也能做出来想要的效果,但是对于一些简单的数据分析、监控来说,就非常烦人了。如果说时间就是生命,那操作这些报表引擎简直就是在割腕自杀,发明这类报表的人就是在谋财害命,让使用报表的同志们把热情消弭于各种本该自动化的调整、点击中。虽说对于开发项目初期那些大型报表来说,能熟练运用这类引擎的话效率也蛮高的,然而因为诸多的反人类设计,这类引擎的学习曲线也比较陡峭,通常熟练起来之后报表也基本都做完了(亲身体验),只能做些锦上添花的小修改,让人暗叹英雄无用武之地。
而MetaBase的话,就…好呗。
最突出的优势是它将SQL编辑器与数据可视化很好地集成在了一起。内置的SQL编辑器有语法高亮,搜索替换、快捷键、语法纠错,自动填充,数据表字段建议等等[1]。在进行一些即时的分析,挖掘一些如工艺参数关系、产量情况等的情形下,非常之方便。
因为MetaBase的文档比较垃圾偏向说明,一些操作细节上的疑难,自己摸索[2]搞不出来的,完全可以去查阅学习,但对于一些提纲挈领的思路,文档就显得模模糊糊,一些名词翻译或者定义本身就有问题,让人丈二和尚摸不着头脑,这便本文的目标——对MetaBase进行一个全局的审视。
通览

- 问题(Question)这其实就是一个将SQL查询与可视化结合在一起的功能,是MetaBase最为基础的组成部分。有各种可视化、查询结果导出、问题提醒。其本身也有一个版本记录功能,出岔子后可以向前复原历史版本的记录。向外可以嵌入到其他地方,放置到仪表盘中。
问题的编辑方式有两种,一种是写SQL,适用于从头写的原始SQL;一种是用图形化界面进行配置,适合于一些已经初步整理的视图。
问题的储存方式也有两种,一种是传统的将其放到一个文件夹里(这里叫做“集合”),然后在各个地方复用;另一种是将其储存到仪表盘里,那就只能在仪表盘的界面里看到点进去编辑。后者适合那些临时的小指标,没有整理归类的必要直接写在仪表里。
界面最下面正中便是基本的两部分——查询结果与可视化。
左侧的可视化有基本的表格(相较于查询结果表,有更多自定义的部分,如控制显示、用条件格式)、柱状图、折线图、饼图、组合图、散点图、也有复杂一点的桑基图、瀑布图、地图、漏斗图等。配置的方式大同小异,都是点击左侧可视化|⚙的可视化,选择图表类型,然后点击⚙配置各个坐标轴的参数、系列、颜色、线宽、格式等等。
图表有一个很人性化的设计——可以自动保存历史每种可视化的配置。比如你费了一些功夫绘制了一个折线图,又想绘制成柱状图看看效果,这时候可视化直接点击到柱状图进行配置(系统会根据前一个折线的配置给你生成一个差不多的柱状图,而不需要从头配置)。当感觉柱状图效果不怎样时,点击回到折线图里,折线图的配置也不会丢失。这个非常细节的设计极其好用。
右侧显示查询的行数、查询耗时、查询结果/图表的导出。
其他
安装
- Metabase安装:下载JAR文件,安装jdk,运行
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar,访问http://localhost:3000/ - SQLite安装:下载sqlite-dll与sqlite-tools,解压到一个文件夹,添加环境变量。终端输入
sqlite3进入交互命令模式,找个合适位置,创建数据库.open ku.db,同时随便创建一个表(Metabase连接时,如果是空数据库,会报错连不上)
1 | CREATE TABLE demo( |
- 连接SQLite:假设我在此处创建了一个数据库
D:/BI/ku.db,那么可以通过jdbc:sqlite:///D:/BI/ku.db链接来在MetaBase中配置此数据库[3]

配置
Metabase支持各种数据库,配置起来也比较方便,文档写的很细,在此不再赘叙。
![]() |
![]() |
|---|
邮箱提醒
参照文档,配置SMTP等邮箱服务,写SQL查询,创建警报,出现预期的不良值时自动触发,发送到自己账号的邮箱里。
![]() |
![]() |
|---|
如果是用的QQ邮箱,在微信里配置一下名为”QQ邮箱提醒“的服务,就可以收到实时的提醒了

问题记录
忘记账号且忘记密码怎么办?
metabase本身的数据是存储在H2数据库中的,可以通过一些数据库管理软件来读取之,比如利用我手头的DBeaver,就可以这样做:
- 停止metabase服务,不然后面访问其数据库时会因为同时访问而报错。
- 在DBeaver中新建一个H2(Embedded V.2)数据库连接,连接时选中
metabase.jar同级目录下的metabase.db.mv.db文件实体。

- 执行如下SQL语句,或者直接点开
public数据库下的core_user表单可以查到管理员的账号邮箱

1 | SELECT id, email, first_name, last_name |
- 最后执行密码重置命令,会得到一个【token】,而后访问
http://localhost:3000/auth/reset_password/【这个Token】即可重置密码
1 | java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar reset-password thebesthumanever@exmaple.com |





