导读:本次分享的嘉宾是赵勇杰老师,他是 Superset 的 PMC member,同时也是 Preset 全职的工程师,在全职维护 Superset 的社区,也是 Superset 的核心开发者;本次分享题目为——从探索式数据分析到现代 BI 仪表盘:Superset 2.0。
今天的分享会围绕以下几点展开:
- Apache Superset 历史
- Apache Superset 功能
- 数据探索
- 数据探索 Demo 演示
- Dashboards
- Dashboards Demo 演示
- Tips
分享嘉宾|赵勇杰 Preset inc. Senior Data Engineer
编辑整理|王超 aasgz
出品社区|DataFun
01
Apache Superset 历史
Apache Superset 最初源于 Airbnb 内部的一个 hackathon 项目,最早的 commit 应该是来自于2015年,时间很远了,离现在有七八年的时间,经过多年的孵化,Superset 于今年也就是 2022 年初毕业,成为 Apache 的顶级项目。
同时 Superset 也是 GitHub 上在 BI 和可视化化领域里面 Star、Fork 和 Maintainer 最多的项目之一。
Superset 不仅仅被被 Airbnb 和 Preset 所维护,维护 Superset 的公司有很多,比如像 Apple、Dropbox 都会有一些全职的工程师来维护 Superset 的项目。所以 Superset 项目变得越来越大,功能也是越来越多。
我今天只是着重的介绍一些数据联通性和数据探索式分析里面的一部分,这些东西是 Superset 最核心的功能,但这些功能也仅仅是 Superset 的冰山一角。
02
Apache Superset 功能
1. Superset 是 Python 的项目,可以利用 Superset 的 DBAPI2 接口来支持所有的关系型数据库的连接
对于 Python 的 DBAPI2 接口,你只需要很简单的实现 Connection 和 Cursor 的 interface 便可以非常快速的开发出来新的新的 DB dialect,这让所有新出现的关系型数据库都可以非常容易的接入 Superset。
2. Superset也有一个功能非常全面也非常强大的 SQLLab IDE
如果您用过 Hue,SQLLab和 Hue非常像,但是它的一些功能会比 Hue 要稍微强大一些,而 SQLLab 也仅仅是 Superset 里面的一个模块。SQLLab 产生出来的 visual dataset 也可以提供结果集给 Charts 和 Dashboards 去使用。
3. Superset 支持非常多的可视化图表
50多种可视化图表是 Superset 所内置的,还可以通过Superset的前端可视化的插件非常方便的定制个性化的图表,而定制化出来的图表完全可以使用 Superset charts 数据探索所有的工具。
4. Charts 可以放在 Dashboards 上,还可以做很多种的数据筛选
在 Dashboards 上可以对上面的 Charts 做各种各样定制化的修改。
5. 插件系统(Plugins)
Superset的插件系统也非常强大,可以自己定制新的图表和过滤器。
6. 定时报告(Reports)
其次是定时报告功能,可以去设定一些定时的任务,让Superset定时的发Charts或者Dashboards。
7. CSS 定制模版(CSS Template)
Superset的前端是可以高度自定义的,可以非常方便的通过自定义的CSS Template来定制整个Superset的样式,比如说字体、背景颜色以及配色的方案。
8. 数据行级别权限, 根据登陆用户映射查询条件
最后是一些企业用户非常感兴趣的内容,可以通过一些配置非常方便的来映射不同登录用户,可以看到不同的用户行级的权限。
举个例子,比如说您可以定义username到where子句的映射,这样不同用户登录进系统就会看到不同样子的数据。
03
数据探索
数据探索是一种数据分析的方法,分析师可以用可视化手段分析数据。这也是Superset 有别于其他的可制化工具非常大差异的产品特性。我刚才看有朋友在社区里面问它和 Grafana 有什么样的区别,数据探索就是和 Grafana 有非常大差异的特性。
1.拖拽式 UI 设计
您可以去用拖拽式的用户体验来拖拽您的指标和维度。
2.平滑切换不同可视化图形(new feature)
比如说您做了一个线图,可以非常方便的把它切换成条形图,或者是把它切换成普通的table或者散点图。目的是为了让您可以很方便的来分析数据,比如说线图可以很方便的来看数据的趋势,而三点图可以很方便来看数据的分布。
3. 维度和指标均可以 customized SQL snippet
这个看起来是很常用的功能,它可以带来什么样的价值呢?我在开发Superset的过程当中以及和客户聊需求当中感觉到这个功能看起来是很平常的功能,但是对很多用户非常有用,因为不同的用户下游的 DB 或者是data warehouse用的是不同的产品。比如说有些人会去用ClickHouse,有些人去用Presto,有些人去用BigQuery,不同的data warehouse会有不同的Fuction以及它自定义的一些表达式,编程没有办法特别快的去响应不同的data warehouse的一些新的UDF或者是它自定义的一些Function。如果一个BI产品可以让您很方便的去写一些自定义的SQL片段,那么您就可以百分之百地去利用下游data warehouse或 DB 的一些能力。
4. SQL 预览/结果集/数据采样
这也是分析师常用的一种分析场景,当您看到了可视化的图形,您也同时想看是哪些SQL产生的这些图形,以及哪些数据集生成的这些可视化图形。数据采样也不用多说了,每个分析师都希望在分析之前先看看数据集里面到底有哪些数据、哪些数据类型。
5. 高级时间分析: 时间平移/采样/滚动计算
具体的业务场景比如说当您做year to date或者是year over year都可以使用,中文叫做同比、环比或者是计算从当前到今年初的一些指标。
6. 高级时间分析: 预测分析
您可以自己加载很多的预测分析的库,在Superset里面的时间分析图里面很方便的使用一些预测的分析。
7. 注解层
注解层我觉得应该是很多BI工具都会有的,您可以非常方便的在可视化图形里面加载某指标的一些阈值,当超过一些阈值,可以给您发送一些报告。
8. 定时发送报告
Superset 的 charts 和 dashboard 都支持定时发送报告,您可以去使用一些Celery 的任务,或者是某些指标触发的规则,就可以给您定时的发送一些报告到邮箱或者slack里面。
9. 各种分享URL/email/embedded codes
同时Superset的探索界面以及dashboard的界面都支持各种各样的分享,比如说URL分享、以Email分享,或者是您想把dashboard或者explore页面通过iframe的方式嵌入到您已有的企业 Portal 里面。
04
数据探索 Demo 演示
由于Superset是可视化的项目,我这么讲不像其他老师那么方便,我接下来要做一个live demo,我昨天录了一个两分钟的视频给您演示一下数据探索界面。demo里面主要想给您演示指标维度的拖拽,在时间分析或指标分析里面,x轴可以自动的适应您时间轴,或者是分类的轴,时间过滤器、时间移动分析、数据预览和采样的功能。
我现在使用superstore这个数据集来演示一下explore界面,首先我进入到Superset 2.0的explore界面,最左侧是可以筛选指标和维度的 Side Bar。
中间是可以被选上的一些control,最右侧是可视化画界面和数据预览的界面。
我现在要拖拽一个指标和维度到control panel,我选择了一个指标是Sales,然后选择了聚合方式是SUM,然后我还会去选择时间的粒度,时间的粒度是Ship Date。
我们现在来做一个轴线图,您可以看到这个折线图是一个以天为单位的折线图,我们可以很方便的修改时间的粒度,成天改为到月,我们也可以很方便地把它改成周。
现在我们接下来是是要拖拽一个非连续的维度到轴里面,我拖了一个Region到轴里面,它会自动的把Line图不再使用连续的维度值,而会使用离散的维度值绘制图形。而离散的值不太适合用线图表示,所以我们把它切换到Bar Chart。
这也是Superset 2.0新出的一个feature,Superset内置的50多种visualization都是可以非常轻松的、自由的、不会丢失任何control信息的切换。而这些查询都是实时发到您的db或者data warehouse,不是把这些数据load到BI层。
我们再把它切换成线性图,我们依然去用Order Date作为它的x轴
这时候我们加一些时间过滤器,时间分析在可视化分析里面是最复杂的一种分析方式,因为它的时间选择会非常多,我们可以去写一些时间的表达式很方便的选一些时间的范围。我这里面只写了很简单的一个时间表达式,应该可以写一些很复杂的,它会根据不同的db,去翻译成所有db所适应的时间的Function。
这是Superset比较有特点的特性,可以去做一些时间的平移,是说您想要看当前的指标和您选择时间平移之间指标的一些差异,比如我们选一年前的指标,我想要看一年前这些指标的值是很容易得到的。
同时我也可以手动输入一些表达式来看一年之后的指标是什么样子,如果一年之后有数据的话,其实计算方式还有很多。
数据预览也是直接往数据库发一些查询,可以看到您当前的数据集里所有列和所有数据。
同时你也可以很方便的预览可视化是由哪些SQL组成的,这些东西都可以非常方便的复制到您的剪切板,可以非常方便再去用其他的数据分析工具来分析
05
Dashboards
当您把所有的Charts放入Dashboards之后,就会生成一个仪表盘,咱们中文经常管它叫做大屏或者是一些什么样的产品。当些Charts放入仪表盘之后,就可以在Dashboards里面做更丰富的一些操作。
1. Native Filter
Superset 2.0有一个新的功能叫做Native Filter,它已经和原来的Filter Box的Charts已经不一样了,它是独立于所有Charts的筛选器,您可以在截图的最左侧看到一个side bar,您可以去设定非常非常多种的过滤器,去对所有的Charts,或者是您指定了一些Charts进行过滤操作。
2. 多标签
Superset的Dashboards支持很丰富的标签操作,您一个Dashboards里面有很多tab,不同tab可以有不同的上下文来描述您的故事
3. 每个 tab 里面有行和列的布局
4. Markdown
除了支持些基本的Charts,在Dashboards上你还可以很方便的插入link、图片或者是Markdown,您可以写一段描述
5. Cross Filter
下面一些就是现在开发当中比较酷炫的一些功能,比如Cross Filter,Cross Filter就是可以通过点选一些图上的维度让整个仪表盘去进行筛选操作 我一会也会做演示。
6. Drill Through(下钻到明细)
接下来是Drill Through的功能,我刚刚看到也有人在群里面问是不是有Drill Down的功能,其实去年我做了一个POC for Drill Down,但是公司希望要做到更好,今年先实现了Drill Through,Drill Through在Superset里面叫做Drill to Detail,您可以通过在图上点选维度,把维度最详细级别展示出来,这个功能现在已经开发完毕,并且可以使用,一会儿我也会去做演示。
7. 对 Charts 最大化, Charts 数据获取
在仪表盘上不仅可以做这些东西,还可以做一些比如您有很多Charts在仪表盘上,您可以对Charts最大化,还可以查看Charts后面到底有哪些SQL,Charts里面到底有哪些数据都可以通过很简单的Click来获得。
8. 自动刷新
还同时支持自动刷新,自动刷新更像是一些监控工具所有的,大家应该都会用过Grafana或其他的工具,您可以去定义秒级的或者分钟级别的去刷新。
06
Dashboards Demo 演示
接下来是Dashboards的demo,比较简单,因为Dashboards的功能太多了,我就找一些我个人感觉到最重要也应该是能够给大家在生产环境里面用到的一些功能做一些演示。
这是Superset自带的一个Example的Dashboards,这个就是一个Native filter,现在我设定了叫做user filter的过滤器,它可以通过用户的名字过滤所有的Charts 。
很贴心的是,这些所有的过滤器上在图上都会有一些的【?】,去告诉您它是否过滤了,是否没有过滤,这个过滤器是否对我没有影响。
这是一个时间过滤器,时间过滤器同时也可以应用在Dashboards上,由于我的数据仅仅是样历数据,它不是真实生产环境,比如说我要过滤last week是无法过滤出来的,我这里只是给大家演示一下,并没有真正的把query发送下去。
接下来给大家Native Filter的界面,这也是Superst 2.0非常重大的更新。是完全独立于Charts的过滤器,您可以在里面设置非常非常多种的过滤方式。
而且还可以设置这个过滤器可以apply的范围,比如说整个Panel,或者我可以让过滤器仅仅应用于某些Charts,而不是整个Panel。
Drill to Detail特性已经支持了大多数的图形,比如Tree Map,可以通过点击channel name就可以看到详细数据有哪些。这在生产环境当中是非常常用的。值得一提的是这个页面上明细数据查询,它会用分析的方式向底层的数据库或者是data warehouse去下发查询。
接下来演示的功能是Cross Filter ,您可以通过点击图里面特定的dimension去筛选其他图,我通过点击general同时把filter发送到其他图里面,你可以看到它的Members per Channel就是general。
我选另外一个dimension的值,它会发送其他的值。
接下来这个功能您在所有页面可以去用到的关于查的功能,在Dashboards里面都可以去用到。我相信这个功能很多竞品的BI可能都没有做到,您可以预览SQL。
就可以看看比如慢查询到底是发了哪些查询,这样子我可以用一些第三方的工具去来explain我这个查询。
这里我可以去看看我的可视化到底是用哪些数据绘制出来的。
最后大家可以看到,其实这上面都可以复制,非常方便的让您通过用Superset把这些你想要得到动件的数据去它复制到剪切板或者其他工具里面。我想这也是现代BI工具必不可少的特性,它不会阻止您对数据的任何操作。
07
Tips
接下来我给您介绍两个除去刚才一些非常常见的一些功能介绍,我就两个Superset使用或者说是开发上可以帮助大家在生产环境里面用起来Superset的两个tips。
1. Feature Flag
首先一个tips叫做Feature Flag,Superset里面有非常非常多的一些实验性的功能,叫做Feature Flag,这些些Feature Flag在开发当中默认是关闭的。当开发完毕才会把一些feature默认设置为True,您如果直接下载了Superset的package或者是镜像,某些特性是用不了的,所以您必须在config里面打开才可以使用。
想要打开的方法也非常简单,您去Superset目录下的config.py,查看您想要修改的Feature Flag,看看是哪一个,举个例子,比如说是CLIENT_CACHE,
您想要打开CLIENT_CACHE功能,你就把key-value的值写到Feature Flag字典里面,然后功能就打开了。您就可以去享用一些还在开发当中或者是一些实验性的功能。
我举个例子,比如说现在这个DRILL_TO_DETAIL,现在它的默认是False,您就把DRILL_TO_DETAIL改为True,那么您在 Dashboard 上就可以看到的Drill to Detail功能了。
2. 制作自定义可视化插件
第二个tips是关于自定义可视化插件。大家都知道可视化项目最大的需求是,每个公司或者每个组织对可视化的需求是千差万别的,那有些公司会去有需要一些非常有定制化的可视化。这样子一些开源的可视化库没有提供怎么办呢,那么您一定就得从头自己写一个。
Superset提供了可视化插件的一个功能,我觉得也是Superset的非常有竞争力、非常好的功能。您不需要写太多代码,您只需要用前端工具可以自动的生成一个插件的模板,您稍微的修改修改就可以把您做好的插件完全适应Superset生态里面的Dashboards、explore等等一些东西。我把教程的链接放到这里:https://preset.io/blog/building-custom-viz-plugins-in-superset-v2,您可以去点击看,非常快,只需要几步,您只要有一点点前端的知识就可以去生成自定义化的前端插件。比如说现在我生成了Hello World的插件,它的作用是把我query的内容通过json的方式它展示出来。
我今天的talk就讲完了,最后我贴一些项目的地址。
非常欢迎各位去Superset的github社区(https://github.com/apache/superset)里面去提Issue、PR或者是去Discussions发言。
其次Superset也有一个非常活跃的slack频道,您可以去里面去提问题,里面有非常多的人,每天都会有非常非常多的人去讨论。
再次是Apache Mailing list,但是Mailing list用的人比较少,和其他的项目不太一样。
最后是Preset的Blog(https://preset.io/blog/),Preset Blog会有很多高质量的教程或者是release notes,大家可以去去看,可以看到Superset最新的一些信息。
08
问答环节
Q1:Superset在探索后固定下来的数据API可以提供给外部API管理器,让其他应用来使用数据吗?
A1:Superset和Tableau、Power BI有非常大的差别是它没有数据提取的过程,它所有的查询都是直接下发到下层的db和data warehouse,它没有办法抽取数据到它内部的存储。但是Superset有数据查询的API,可以供您使用,您可以去看Superset API的Document。
Q2:自助拖拉拽很多情况下是建立在数据集上的,那么基于该数据生成的BI看板或报表界面中的filter条件为什么不能透传到数据集内部,现在大部分是基于数据集外添加过滤器,不是很影响查询性能吗?
A2:Superset很有特点的一点是下发查询直接到db或data warehouse,并不存这些数据。Superset的性能瓶颈不是在于Superset本身,而是在于下游的db或者data warehouse, 也是现在数据栈的特点,每一层做好自己的事就得了。
Q3:基于数据集下拉筛选条件目前都是基于数据distinct得操作,可以去绑定伪表吗?
A3:我理解您的意思,一些高基维的维度表如果是直接下发count distinct,就很难查询回来,如果您直接下发到另外的维度表的话,下拉筛选的性能会好很多,Superset是可以去做这种修改的,但是现在开源版本没有做这方面的修改,不过应该可以通过比较简单的一些 hack 去实现。这也是开源项目有意思并且让很多大公司、一些知名的互联网公司去Fork、去使用的原因。