开源自助BI工具

一:业务背景与需求梳理

公司现在的数据需求主要分为两类:临时需求(业务突然想看看这波活动的效果怎样,数据指标的定义可能随时改,随时加),固化需求(每周要看,每月要看的数据,数据的定义已经非常明确)。对于这两类需求,我们现在的处理方案是

  • 对于临时需求:写HQL到Hive里去查一遍,然后将结果转为excel发送给需求人员。
  • 对于固化需求:编写脚本,结合Hive跑出结果,将结果写入对应DB库,然后通过第三方百度的BI工具进行汇总展现。

这样做简洁明了,但很明显的问题:

  • 开发成本太高:每来一个需求,不管是临时需求还是长期需求,都需要进行定制开发,这种情况下,我们的人力深陷其中。
  • 使用不灵活:一个报表,只能进行展示,没有分析功能,如果要进行分析,需要将数据复制到excel里,利用excel进行处理分析,而我们的数据使用人员不一定具备这种能力。
  • 资源浪费:不同人员开发的报表,很多情况下存在很多重复计算。
  • 其他体验问题:hue的查询速度特别慢,做select from简单的查询,要等一分钟以上(底层引擎tez太慢)

在这种情况下,我们准备构建一个多维分析平台,让业务方自己能够取数,而且最好不用SQL,因为我们的业务方大部分不会SQL(尽管我们已经开展SQL培训,但还是有一定门槛)。这个平台至少满足以下需求
1.SQL查询的速度更块(现在hue太慢,简单查询要2分钟以上),所以底层要支持大数据OLAP引擎
2.更傻瓜的自助分析模型,最好是拖拉拽;(因为很多分析师都没有SQL技能)
3.可视化上有最基本的图表类型(包括数字,地图,时间趋势)
4.开源产品,免费;商业化的产品数据都在别人的服务器上;
5.报表/看板的筛选功能支持时段筛选,最好能联动筛选;
6.权限满足最低门槛(修改,删除表可控制),同时能做到数据行级控制(很多业务部分看数据)

二:产品分析

我们直接入手了开源工具,筛选出了下面几个产品做为重点调研对象:
Superset、Metabase、Davinci

A)Metabase (gihub star 15,670)

Metabase

官方的宣传特色(版本号:v0.32.9)

  • 5分钟设置(We're not kidding)
  • 让团队中的任何人在不知道SQL的情况下提出问题
  • 丰富美观的仪表板,自动刷新和全屏
  • 分析师和数据专业人员的SQL模式
  • 为您的团队创建规范细分和指标
  • 使用Pulses按计划发送数据给Slack或发送电子邮件
  • 使用MetaBot随时查看Slack中的数据
  • 通过重命名,注释和隐藏字段,为您的团队人性化数据

整体上,个人体验下来,亮点特色如下:
a)交互体验对业务人员非常友好。通过一个对看板和单图做了一个全局搜索的功能,营造一种”ask a question“的智能场景。即通过搜索框咨询,系统告诉你答案。且整个产品的界面非常简洁明。
b)制作单图时非常简单,以数据为中心,去选择不同的图形(不可选的图形自动打灰)。基本做到了半分钟就能完成一个单图的分析。
但但是最大的不足是权限管理实在太弱,只有可修改/可见的粗粒度控制,对表是否可删除都没法单独控制。

各方面的具体情况如下:
1)数据源与数据管理

  • 支持的数据库* 相对较弱:Postgres、MySQL、SQL Server、Redshift、SQLite、Google BigQuery、H2、Oracle、Vertica、Snowflake、MongoDB、Druid、Presto、SparkSQL
    (特别需要注意的是:其中Druid的版本为2.0版本,所以不支持sql查询,威力大打折扣;另外也不支持Hive,Kylin)
  • 统一的数据模型管理入口,添加数据表/视图后,设置维度/度量字段(该部分做得很细,设定的类型做了很丰富的扩展)
  • 提供定时任务,数据库同步(小时级别)
  • 自助的表字段信息透视功能,智能化探索,自动出看板,自动关联数据的分布(加分酷炫功能)
    表字段透视

2)chart单图&dashboard看板

  • 单图制作流程非常简单:选择数据源->选择过滤条件->选择分析指标->选择分组维度->选择可视化类型
  • 支持的可视化图形种类仅能满足基本需求,14种可视化方案(包含漏斗、带变化的数字、地图)
  • 对一些图表可做细节控制,比如表单按条件控制行颜色,调整字段位置,显示迷你彩条,前后缀设定
  • 支持基本的过滤条件,包含日期段(通过筛选器的字段与单图中字段的关联)
  • 提供简单的图表钻取功能,但不支持图表的联动
  • 可一键复制已有看板
  • 自动刷新数据最小粒度到1分钟
  • 分享上支持:公开链接,公开嵌入(博客网页),在应用中嵌入
  • 使用Pulses按计划发送数据给Slack(一个国外的聊天工具)或发送电子邮件


    表单格式设置

3)SQL查询

  • 支持关联填补字段/表信息
  • sql查询结果可直接切换图形展示方案
  • 不支持跨库关联查询
  • 原生查询中的变量允许使用筛选组件或URL参数来动态替换查询中的值
SELECT count(*)
FROM products
WHERE 1=1
  [[AND id = {{id}}]]
  [[AND category = {{category}}]]

4)权限管理

  • 通过对角色设置权限,用户指定角色,实现权限的控制
  • 权限设置力度非常弱,只能设置是否可访问权限(可访问的数据可能直接被删除)
  • 权限设置对象较浅:仅可对数据源,数据表,图表,分析项目集合的权限控制,不到数据行级
  • 字段级的字段控制可设置可见不可见(敏感字段场景),但不能分角色管理

5)二次开发

  • 技术架构:Clojure+Recat+Redux
  • 提供了完整的API文档,可凭借丰富的API与文档完成许多二次开发

B)Superset (gihub star 25,163)

superset

官方的宣传特色(版本号:v0.32.9)

  • 一个直观的界面,用于探索和可视化数据集,以及创建交互式仪表板。
  • 各种漂亮的可视化来展示您的数据。
  • 简单,无代码的用户流程可以深入挖掘并切割暴露仪表板下的数据。仪表板和图表可作为深入分析的起点。
  • 最先进的SQL编辑器/ IDE,提供丰富的元数据浏览器,以及从任何结果集创建可视化的简单工作流程。
  • 可扩展的高粒度安全模型,允许谁可以访问哪些产品功能和数据集的复杂规则。与主要身份验证后端集成(数据库,OpenID,LDAP,OAuth,REMOTE_USER,...)
  • 轻量级语义层,允许通过定义维度和指标来控制数据源向用户公开的方式
  • 开箱即用支持大多数讲SQL的数据库
  • 与Druid的深度集成允许Superset在切割和切割大型实时数据集时保持快速
  • 快速加载仪表板,带有可配置的缓存

整体上,个人体验下来,亮点特色如下:
a)深度整个主流大数据引擎,SQL查询速度体验没得说;
b)可视化选择非常丰富,基于经纬度的地理位置可视化方案有好几套;
c)权限控制非常细,细到每个功能键;
可惜最大的问题是对于业务分析师的用户体验不是很好,可视化流程是要对不同图形方案做对应参数设置,权限控制也非常复杂。

各方面的具体情况如下:
1)数据源与数据管理

  • 支持的数据库* 非常丰富:Athena、Redshift、Drill、Druid、Hive、Impala、Kylin、Spark SQL、BigQuery、Pinot、ClickHouse、Google Sheets、Greenplum、IBM Db2、MySQL、Oracle、PostgreSQL、Presto、Snowflake、SQLite、SQL Server、Teradata、Vertica
  • 支持上传本地CSV文件
  • 数据表模型的管理,可设置字段类型,维度/可否过滤/可否做时间列,二次加工字段,统计指标


    数据模型管理
  • chart可用的数据表得一个一个从数据库里添加(SQL工具箱可以全部看到),不是很方便。
  • 深度支持durid

2)chart单图&dashboard看板

  • 单图制作流程:选择数据源(表或视图)->选择图表类型->设置图表参数(指标/维度/过滤条件)。选择数据源只能从数据表列表页选择,进到分析页面后无法更换数据源;由于切换不同的图表类型时就要按照不同图重新填写参数,在自助分析时用起来不大方便;
  • 支持的可视化图形种类十分丰富,48种可视化方案
  • 看板的过滤功能非常弱。连最基本的日期过滤组件没有。通过单图中的过滤器组件实现;只能针对单个数据表做出过滤组件,然后应用到看板上。此功能也很不方便
  • 提供简单的图表钻取探索功能(直接跳入到单图里面),但不支持图表的联动;
  • 数据格式(比如3721,显示成0.4k)可以有很多种方案可供选择
  • 看板不能直接复制克隆,要做复制一个看板只能重新编辑选择单图;
  • 看板支持自动刷新,刷新最小时间粒度为10秒
  • 分享上支持:公开链接,可嵌入其他网页中,可以通过底层参数调整做免密
  • 应用于chart的sql视图必须是select from的形式,否则会查询错误(不能用with as)
  • 不支持邮件发送报表数据
  • 不支持图表/看板的分组
  • 不支持图表的下钻,多图联动
  • 不支持直接对日期范围做筛选
  • 透视表功能不能按行/列做百分比汇总;
  • Druid引擎的计算结果,不能在superset里面生成新的指标
    3)SQL查询
  • 支持关联填补字段/表信息
  • 支持跨库关联查询
  • 一个多选项卡环境,一次处理多个查询
  • 查询结果可视化,需要保存成视图,再跳转到chart页面;且需要对该视图做赋权(过程非常不方便)
  • 可对查询历史记录做搜索;
  • 支持使用Jinja模板语言 进行模板化,该语言允许在SQL代码中使用宏

4)权限管理

  • 通过对角色设置权限,用户指定角色,实现权限的控制
  • 权限控制的粒度非常细,支持功能型的权限控制(表的修改可细分到删除,新增操作),支持对菜单,数据源,数据表,字段,图表,看板的权限控制;
  • 权限的配置非常复杂,繁琐.
  • 不支持数据行级控制


    角色权限

5)二次开发

  • 技术架构:Python+Flask+Recat+Redux+SQLAlchemy
  • 原属Airbnb的开源项目,背后有大公司团队支持维护,版本更新,bug修复,二次开发有较大保障
  • 支持restful API
C)Davinci

未完待续~