概述
一款开源BI工具,后端是用clojure开发的。官网,GitHub。
安装
安装非常简单,以metabase.jar
包(后文简称jar包)方式分发。在GitHub Release页面下载最新版即可。也可以通过wget命令下载:
wget http://downloads.metabase.com/v0.30.0/metabase.jar
。通过wget命令下载时的劣势是不知道最新版本号,从GitHub Release页面得知最新版本号后,替换掉前面的wget下载命令里面的版本号(v0.30.0
),即可下载最新版。
Windows系统安装wget,参考Wget入门使用教程。
不同版本的jar包文件,需要不同的JDK版本。一般而言,现在没有人还在使用JDK 8以前的版本。查看JDK版本:java -version
。
启动:java -jar metabase.jar
,正常而言会启动成功。如果启动报错:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/vladsch/flexmark/ast/HtmlInlineComment has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
参考IDEA常见使用问题整理文章里面的【无法访问com.zaxxer.hikari.HikariConfig】问题。
表示配置并使用的JDK版本和jar包版本不匹配。要么去下载更新的JDK版本,要么去下载更老的jar包版本。推荐前者,因为不知道得下载哪个旧版本的jar包,旧版本也会有一些bug,且不能体验新版本的新特性。
启动日志
控制台启动日志:
WARNING: Using Metabase with an H2 application database is not recommended for production deployments. For production deployments, we highly recommend using Postgres, MySQL, or MariaDB instead. If you decide to continue to use H2, please be sure to back up the database file regularly. For more information, see https://metabase.com/docs/latest/operations-guide/migrating-from-h2.html
INFO metabase.core :: Starting Metabase in STANDALONE mode
INFO metabase.server :: Launching Embedded Jetty Webserver with config:{:port 3000}
INFO metabase.plugins :: Loading plugins in D:\program\metabase\plugins...
INFO db.setup :: Running Database Migrations...
INFO db.setup :: Setting up Liquibase...
INFO core.QuartzScheduler :: Quartz Scheduler v.2.3.2 created.
INFO jdbcjobstore.JobStoreTX :: Using db table-based data access locking (synchronization).
INFO metabase.core :: Please use the following URL to setup your Metabase installation: http://localhost:3000/setup/
INFO metabase.sample-data :: Loading sample database
INFO util.files :: Extract file /sample-database.db.mv.db -> D:\program\metabase\plugins\sample-database.db.mv.db
从这个经过删减的日志能发现不少细节:
- 使用内存数据库H2,存储到本地文件,支持关系型数据库,且支持把H2文件导入到关系型数据库;
- 以STANDALONE,即单节点;Release下载页,还有企业版jar包;
- 使用Jetty容器;
- 支持插件,启动jar包时会把这个jar包里的插件,即各种不同的数据源(如Impala,ClickHouse等)的驱动
-driver.jar
文件,抽取到同级目录下的plugins文件夹下; - 支持数据库迁移,使用Liquibase,而不是Flyway;
- 使用久未更新的最后版Quartz-2.3.2作为任务调度框架
- 默认端口地址为3000
- 自带一个sample数据源
数据源
浏览器打开:http://localhost:3000
,无需输入用户名密码。下一步,有配置数据源的界面,可添加一个数据源;也可以跳过,使用内置的数据源Sample Database,在上面的启动过程中可看到加载Sample数据源的信息。这里添加一个数据源:
填好host、port、数据库、用户名和密码5元素信息后,会自动给出该DB下面各个表的dashboard信息。
数据源是数据产品,比如报表工具的核心,所有功能几乎都基于数据源。
使用
概念
有这么几个概念:
- 集合:Collection,可理解为文件夹,集合下面可以新增集合,类似于文件夹下面可以新增子文件夹;
- 问题:Question,可理解为Step By Step创建一个Dashboard;
- SQL查询:SQLQuery,SQL编辑运行展示查询结果等功能;
- 仪表板:Dashboard,可包含多个SQL查询或Question;
- 模型:Model
Question
新增第一个Question时,会提示选择某个数据源(内置的Sample或自己添加)的某个表,出现如下步骤:
Filter用于筛选表的结果集,如只看某个用户创建的Board,然后筛选方式也有很多种:
Summarize用于查看某个指标,支持的指标如下:
最后选择哪个列进行group by。
后面再新增Question时,就可以选择基于某个数据源或已有的Question。
SQL查询
新建SQL查询,提示选择某个数据源。会出现一个上下排版的页面,上面是SQL编辑框,下面是执行结果展示框。SQL编辑框自带关键词、表名、字段名等智能提示,写SQL体验很棒。
如上图,SQL编辑框右侧有5个button:
- 缩小编辑器:方便查看查询数据;
- 了解数据:会列出全部表名,点击某个表,会列出全部字段,点击某个字段,会列出该字段的全部数据
- 变量:参考下面章节
- SQL片段:片段是SQL的可重用位。点击新建,弹窗提示,可知SQL片段常用于where查询条件
- 执行:提交执行,快捷键Ctrl + Enter
SQL片段
注:系统设置里面可以方便快捷地即时更新系统语言。所谓即时,即不需要重启应用。绝大多数英文都看得懂,看不懂时可以切换成中文。但是不建议这么做,有些地方的翻译非常怪(不是下面这个截图)。本文截图中英混杂。扯远。
根据这个提示,不难得知,SQL判断常用于where子句
变量
在SQL编辑器里面写出的SQL带有{{variable_name}}
类似这样的片段,就定义一个变量:
select * from user where update_time > {{date}};
可以在侧边栏中为变量指定类型,从而更改其行为。变量支持4种类型:文本、数量、日期、字段筛选器:
如果设置变量的类型为日期时,会出现一个DateTime Picker:
选择某个日期后,记得点击右下角的更新筛选器。
参考文档
模糊查询实现有点问题:
报错如下:
进阶
稍微有一点点深入吧。
订阅
订阅功能是把仪表板的数据通过邮件发送给指定的用户。首先需要设置邮箱服务器,点击右上角的设置按钮选择Admin settings,点击Email,即打开http://localhost:3000/admin/settings/email
这个URL,配置好SMTP服务器所需的各种信息。Metabase会自动校验服务器信息是否配置正确,配置正确后会出现一个Send test email按钮。点击按钮,就会给超管用户(也就是安装时配置的邮箱地址)发送一个邮件,这个是邮件发送方截图:
这个是邮件接收方截图:
地图
在做仪表板时,经常会遇到类似如下这种按照省市区域展示数据的需求:
PS:之前放的一张大图,被标记图片违规?violation-del?
Metabase当然也支持,设置页点击Maps,得知Metabase默认使用OpenStreetMaps地图数据,支持使用其他地图数据。另外地图数据一般都是json文件,通过添加一个在线地图数据JSON文件网址,如MapBox,可展示想要的地图效果。
认证
支持Google或LDAP两种方式。
分享
支持公开链接、公开嵌入、应用嵌入三种方式。前两种方式由于其公开性,只能分享不敏感数据;隐私敏感数据,需通过第三种方式实现。
http://localhost:3000/admin/settings/embedding-in-other-applications
原理
metabse在运行时写入的数据都会存在一个db里metabase.db.mv.db
。
参考
- https://www.metabase.com/docs/latest/operations-guide/
- Metabase使用教程
- https://www.jianshu.com/notebooks/28486864