1、目前只有数据模型抽取模式才支持设置预计算。 2、目前预计算支持的高速缓存库:SmartbiMpp产品默认使用高速缓存库CH、StarRocks。 3、只有数据模型的抽取计划成功执行完成后,新创建或者修改的预计算才会生效。 4、具体功能限制可查看:6 功能限制章节。 |
预计算:即把某些耗时的操作(例如JOIN、聚合)的结果保存下来,以便在查询时直接复用,从而避免这些耗时的操作,最终达到加速查询的目的,它是解决性能的一个举措。
预计算原理:其核心原理是借助高速缓存数据库的物化视图技术,在数据模型创建预计算时,触发数据抽取操作,将预计算结果插入或更新到缓存库。后续报表层查询时,若符合命中规则,可直接从预计算表取数,避免复杂的实时计算,大幅缩短查询响应时间。
数据模型编辑界面支持预计算配置,一个数据模型可以建立多个预计算。
适用于如下场景:
适合事实表数据行数很大的情况,比如千万级别。
以产品自带的“订单模型”为例:
去创建透视分析,查询各个区域、省份、城市各个月份的销售额、同期销售额、环比等:
假设它现在查询比较慢,希望能优化一下性能,该怎么办呢?
具体操作步骤如下:
1、打开预计算管理:点击 “添加预计算” 按钮:
2、弹出 “预计算配置” 对话框,去创建预计算
选项 | 说明 | |
---|---|---|
预计算名称 | 必填项;且在整个数据模型中具有唯一性,不能重复;取名建议与最终查询用途意思相近,这样方便维护。 | |
别名 | 非必填,如未填写,别名与预计算名称一致。 | |
描述 | 非必填,描述主要为了更好的记录该预计算的用途,防止后面不知道该预计算的作用,可以在描述这里详细记录。 | |
事实表 | 事实表(预计算原始表)下拉框中仅显示模型中有度量的事实表,维表不会显示 这里是以事实表为中心,根据数据模型中设置的关系(基数、筛选方向),会动态构建出一个查询 核心子图 ,预计算可以针对该查询 核心子图 中的所有字段。
| |
预计算字段 | 点击添加字段会弹添加字段框: 以树控件方式展示以选中事实表为中心构建的查询子图中的所有表及字段,分为 “维度” 和 “度量” 节点。
|
3、根据步骤1的说明,填写好预计算信息,给它命名为“区域省份城市销售额查询加速”,配置如下:
4、点击 确定,回到预计算管理界面;在这里可以查看所有的创建的预计算:
选项 | 说明 |
---|---|
状态 | 会自动检测,如果发现异常会显示“有错误”,没有异常则显示“正常”。 比如:修改了基数关系,原本维表与事实表之间是一对多,后面改成了多对一,状态会显示“有错误”: |
删除 | 点击 “删除” 按钮,系统会弹窗提示用户,删除预计算后,之前能命中该预计算的查询将从原始数据取数,查询速度可能降低。 |
编辑 | 点击 “编辑” 按钮,会打开 “预计算配置” 对话框,此时 “预计算名称” 输入框变灰色,不可修改,其他操作与新建时相同。 |
字段匹配限制:报表查询的字段与预计算的匹配要求较为严格。
基于 3.3 示例说明 创建的透视分析报表,查询之后:
1、在系统监控上把刚执行的SQL语句拷贝:
2、拷贝到连接的高速缓存库中,使用explain 再把刚拷贝的SQL语句复制到它后面,执行,如果高速缓存库是clickhouse,命中成功之后,会显示如下图所示:
如果高速缓存库是StarRocks,命中成功之后:
1、目前预计算功能仅在抽取模式下支持,直连模式暂不支持。这意味着采用直连数据源方式构建的数据模型无法使用预计算功能来提升查询性能。对于一些对数据实时性要求极高,且依赖直连模式获取最新数据的业务场景,无法通过预计算优化查询速度。
2、缓存库支持限制:现阶段新引擎 MPP 库仅适配了 CH(ClickHouse)和 StarRocks 这两个缓存库,如果企业使用的是其他类型的缓存库,无法使用该预计算功能。
3、汇总依据限制:预计算目前不支持属性、唯一计数的计算。在实际业务场景中,若需要统计唯一客户数量、唯一产品 ID 数量等涉及唯一计数的指标,或者对某些属性进行特殊计算,预计算功能无法直接满足需求。
4、依赖抽取计划:预计算依赖数据模型的抽取计划,只有抽取计划成功执行完成后,预计算才会生效。如果抽取计划由于各种原因(如网络故障、数据源问题等)失败或延迟,预计算无法及时更新,导致查询时无法获取最新数据,影响业务决策的及时性
5、更新性能影响:预计算跟着模型的抽取进行抽数,可能会导致抽数变慢。当数据量较大且预计算任务较多时,抽取过程会消耗大量的系统资源,延长抽取时间,进而影响整个数据处理流程的效率。而且在数据模型发生变更时,如关系调整、字段删除等,检测预计算是否正常以及更新预计算的过程可能会出现异常,导致预计算无法及时准确地反映数据变化。
6、目前预计算仅支持在单个数据模型内进行创建和使用,无法跨数据模型或跨数据库进行预计算操作。对于企业中存在多个数据模型,且需要对不同模型的数据进行联合分析的场景,预计算功能无法提供有效的支持。例如,销售数据存储在一个数据模型中,客户数据存储在另一个数据模型中,若要对销售数据和客户数据进行关联分析并使用预计算优化性能,当前功能无法实现。