跳至正文

大数据太慢?Tableau Server优化性能方法一览

致敬Tableau20周年

作为企业级的“敏捷数据仓库与BI分析平台”,Tableau Server可以为企业提供一站式的数据编辑、数据治理、可视化访问、交互洞察等功能,其中可视化访问是整个体系的中心。

随着数据量越来越大,如何优化访问性能,也成为服务器管理员考虑的重要内容。本文将简述在实践中常用的几个方法,每个方法各有利弊,需要针对场景进一步评估。

加载视图时有两个潜在的瓶颈:其一是数据查询效率(从数据源提取数据),其二是视图渲染和呈现(创建视觉效果,例如绘制形状或呈现地图)。数据提取是改善查询效率的终极之术,而视图加速、数据新鲜度则聚焦视图渲染。

一、高性能终极技能:数据定时提取

作为Tableau的核心技术之一,hyper数据引擎提供了远超大家想象的数据存储和分析能力,早在MBP数据库还没有火起来之前的2010年,Tableau就收购了数据引擎公司hyper,并将其整合发布在最为重要的版本10.5中(喜乐君也是从这个版本开始使用Tableau,被它的速度所震撼)。时至今日已经13年,依然是Tableau数据引擎的关键支撑。

按照官方的说明,Tableau 的数据引擎技术 Hyper可以在几秒钟之内对几十亿行数据完成临时分析。Hyper 是 Tableau 平台的核心技术,它利用专有的动态代码生成机制和最先进的并行方法提高数据提取的生成速度及查询的执行速度。

【致敬Tableau20周年】分析工具篇SQL、DAX、VizQL(下)

在分析事件中,如果你追求如何场景的展示性能,那么借助于数据提取将外部或数据库数据转换为Hyper几乎是最佳选择:

1、数据量比较大,需要借助于Tableau Server开放给所有业务分析师快捷访问和分析

一个比较好的参考标准是100万行——这相当于Excel2007+的上限数量(1048576行),100万行存储大约多少呢?

假设一个数据表11列,其中四个字符串、两个日期、五个数字,按照字符串16个字节(一个汉字2个字节)、日期8个字节、数字4个字节计算,每行100个字节,100万行的数据量就是1亿字节,大约100M。

因此实践中,数据量行数超过100万行或者数据存储超过100M, 推荐大家数据提取。如下图所示,Tableau数据源可以随时在实时与数据提取之间切换,并按需设置数据提取的频率。

2、存在大量自定义计算,特别是大量的行级别计算,那么数据提取会大幅提升性能

在很多企业实践中,喜乐君发现分析师非常喜欢使用SUM+IF的逻辑来预先计算MTD、YTD聚合,还有大量的Datepart、LEFT等行级别计算,这确实会带来超级的灵活性,代价是消耗更多算力。

参考: Tableau计算MTD/YTD、去年同期MTD/YTD的方法

在《数据可视化分析》书中,喜乐君就介绍过很多类似的案例,第二版本中增加了一个小案例,使用DIV整除获得30天为间隔的M0、M1、M2……时间段。

如果存在大量的行级别的计算,那么预先提取数据将会带来非常明显的访问改善,因为原本依赖数据库的查询、计算,现在可以在Tableau Hyper列式数据引擎中更快地完成。

3、每天更新的数据量超过100M的超大数据集,推荐使用“增量更新”

在金融、互联网公司中,普遍存在每天更新超过几百兆的超大数据集,比如账户余额数据表、app行为记录表等。为了完成长周期的行为分析,业务分析师需要同时引用较长时间段的数据,典型的如过去31天的账户状态变化、app新老版本的行为对比等。

此时,历史业已固化的数据保持不变,每天定时更新当日数据的“增量提取”(Incremental extract)就是最佳策略,增量提取的事实表称之为“累积快照事实表”(Accumulating snapshpt fact table),这原本是数据仓库中数据表概念。

在近期的制造业分析中,为了解决上游ERP没有库存日期切片数据,又没有独立的数据仓库的问题,喜乐君就使用Tableau Server的增量数据刷新,以hyper数据引擎构建了“每天的库存详情快照表”。

当然,如果以增量为目的,这里就不能同时使用“全量更新”,否则数据会在全量刷新时被覆盖。

二、实时与性能的最佳平衡:“视图加速”

在很多时候,我们无法做出数据提取的选择,比如领导需要随时查看实时的业绩情况,生产车间需要了解当前的生产进度,仓库需要了解实时库存而非昨日期末数据,此时,数据实时连接(direct query)就是必然选择,分析师只能在视图阶段做出努力优化呈现。

在Tableau2022.1版本中,Tableau推出了数据加速(View Acceleration)功能,只需要一键即可获得百倍的性能改进。像极了亚马逊早年的“one Click®️”一键下单功能!

如下所示,仪表板所有者和具有编辑权限的用户可以意见打开“加速”功能,之后就会看到每个页面后面增加了“挂起”的标记,此时,每个页面对应的数据都相当于增加了数据提取的定时任务。它什么时候运行?它需要多久完成?不知道,用户也不需要知道,Tableau默认给予了较高的优先级,在资源空闲时完成。

当然,既然是加速,就一定有缓存,只是缓存的时间不像“定时数据提取”一样精确预设。访问用户可以在访问视图中查看,还可以在加速缓存和实时查询中做出选择。 如下所示。

因此,“视图加速”的对象是视图,而“数据定时提取”的对象则是数据源,前者更靠近仪表板和业务用户,后者更靠近数据源和数据库用户,二者分别适用于对实时有较高要求和对全局数据有较高要求的场景。 可谓是最佳组合——当然,你只能二选一。

当然,“视图加速”也有明显的不断,它不支持自定义的配置,也就是灵活有余而定制不足,因此复杂场景还需要下一个功能补充。

三、灵活配置的进阶技能:数据新鲜度策略

在大多数情况下,“视图加速”可以满足用户的平衡之选,但是,如果你想要更精细化地控制数据缓存,比如在每天早上8点做好缓存,以备稍后的早会使用,或者每隔30分钟刷新一次,以备车间工作人员无需操作就获得获得最新数据,那么,分析师就需要借助于“数据新鲜度策略”完成。

当然,使用数据新鲜度的前提是仪表板至少要有一个“实时数据”,否则数据永远是过时(overdated),没有新鲜度可言。

“数据新鲜度”是一个比“视图加速”更早的功能,发布自2021.3版本,之间已经过去两年之久,还是有太多人需要了解它的魅力。如下图所示,只需要点击仪表板设置,选择“编辑数据新鲜度策略”,即可在配置选项中任意选择。

分析师可以根据场景选择配置,比如为晨会设置固定时间刷新,为车间仪表板设置间隔时间刷新,为苛刻的领导提供“始终在线”(算力就是资源,一些关键领导当然值得消耗更多的算力为之服务)。

可以看出,数据新鲜度是平衡性能和数据及时性的最佳之选。

当然,我们也要记住,数据世界的每一步都需要消耗对等的资源,现实世界“能量守恒”,虚拟世界也不会背离太远。“始终在线”就像是每隔几分钟就刷新数据,会导致某些仪表板长期占用服务器的处理器核心和对等的内存,很容易影响其他的关键人物效率。因此,设置此类策略时,建议还是为一下:“算力成本和产出是否对等”。

至此,喜乐君介绍了三种主要的数据访问优化策略,从最常见的数据提取,到实时场景下推荐的“视图加速”,再到兼具灵活和效率的“数据新鲜度策略”,Tableau Server总有适合你的一条路。


参考:


了解 喜乐君 的更多信息

订阅后即可通过电子邮件收到最新文章。