利用Metabase分析MongoDB数据
LI Rui

最近假期懒癌犯得严重,想把数据库里面的一些数据拿来分析,又不想碰Python写代码。于是在网上到处闲逛,正好发现一个好东西——Metabase。

Metabase是一款能够从MySQL、MongoDB、SQLite等多种数据库导入数据,并对其进行可视化分析的软件。同时,Metabase有完整的用户管理系统,可以允许多人分权限进行工作。

官方提供了在线托管版本和开源版本,我们这里选择使用Docker进行部署:

1
docker run -d -p 3000:3000 --name metabase metabase/metabase

访问本地的3000端口,Metabase提供了友好的安装程序,用户可以在此设置数据源、用户等信息。

添加数据库

进入管理后台,我们能够添加数据库,下面是其支持的所有数据库类型。

这里我们使用MongoDB,同时选择更为常用的连接字符串进行配置。这里一次是添加一个数据库,添加完成后,我们能够在主页看到新增的数据并选择需要分析的表。

进行简单分析

选择了需要的数据后,Metabase会如上图一样展示我们的数据,如果需要进行可视化分析,我们可以点击左下角的可视化,并选择需要的可视化方法。提供的可视化方法包括:线段、柱、组合、区域、行、瀑布、分散、饼图、漏斗、趋势、处理、标尺、数字、表格、枢轴表、地图等。下图展示了经纬度数据的可视化:

使用自定义查询

如果我们的数据非常格式化,那么我们可以使用简单查询或者自定义查询就能解决问题。简单查询是直接挑选并直接浏览数据,自定义查询允许创建自定义列并进行数学计算。

但这里我们遇到一个前两种方法无法满足的场景:

我们的MongoDB数据库中存放了一些条目,每个条目可能都有一个或者多个类别,我们用一个名为categories的数组来存放。这时候我们想生成一个饼状图看看各个类别的占比。

如果我们直接使用原始数据的话,我们会得到如下结果:

1
2
3
["a", "b", "c"] -> "a","b","c"
["a", "b"] -> "a","b"
["b", "c"] -> "b","c"

即Metabase不会主动把数组元素一个个分开进行统计。这时候我们需要利用Aggregation查询。示例自定义查询代码如下:

1
2
3
4
5
6
7
[
{$unwind: "$categories"},
{$group: {
_id: "$categories",
nums: {$sum: 1}
}}
]

这里我们将categories数组给拆分出来,即原来一个属于三个分类的条目会被拆分为三个仅属于一个分类的条目,之后对分类进行统计。这样Metabase就能够对数组进行可视化分析,生成相应的图标。

总结

最开始使用Metabase的初衷是因为MongoDB Compass的分析只会取1000个数据样本且无法更改大小,而Metabase能够自定义条件或者分析整个数据库,总体体验下来感觉不错。不过如果数据分类过多,可能显示上会存在问题。

  • 本文标题:利用Metabase分析MongoDB数据
  • 本文作者:LI Rui
  • 创建时间:2021-02-23 19:36:30
  • 本文链接:https://www.lirui.tech/post/2021/ff8f5a633090.html
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!