页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

1 概述

在数据处理与分析场景中,当数据量庞大时,查询效率成为关键问题。

...

信息
title前提条件

使用该功能前,需确保开启 SQL 简化功能默认开启。

1、需要在系统选项/高级设置: 将COMMONS_SQL_OPEN_SIMPLIFY_SQL 设置为 true。
2、同时,OLAP 引擎也需开启 SQL 简化开关,即在配置项设置: mondrian.simplifySql 设置为 true。

只有完成这些配置,分区命中才能正常运行。


2 适合场景

  • 事实表数据量大(如订单表、交易表),且已按日期(如年月日、年月)分区。
  • 许多业务场景中,常以时间维度进行数据过滤查询,如查询特定月份或年份的数据。当事实表以日期相关字段(如 “年月”“年月日” 等)作为分区字段时,通过设置分区,关联的日期维表字段作为过滤条件(如年、年月、年季、年月日等),能命中分区,加快查询速度。

3 场景限制

  • 分区字段仅支持整型、字符串、日期类型。其他数据类型的字段无法设为分区字段。
  • 过滤操作符限制:详细可查看4章节。
  • 不支持“年周”。
  • 设置好的分区字段及其关联维表,暂不支持命中包含快速计算(如同期值、前期值、环比、同比等)的查询场景。即使配置了分区,涉及此类计算的报表仍可能无法利用分区优化。


3 具体示例

3.1 分区字段字符串:在事实表上设置了分区字段,可直接使用分区字段作为过滤条件,能直接命中

以MYSQL数据库表创建分区为例进行说明

1、连接到mysql数据库中创建表:DateExchange,同时给设置好分区,如下图:

...

如果使用事实表分区字段作为过滤条件,这个产品本身就可以直接命中的。

3.2 分区字段字符串:在事实表上设置了分区字段,使用关联的维表的时间维度作为过滤条件

以3.1示例创建的表以及分区为例进行说明

1、在数据库下的表进行“分区设置”

...

总结:关联的日期维表所创建的时间维度下面的所有时间层次作为过滤条件,都能命中分区。


3.3  分区字段为日期:在事实表上设置了分区字段,使用分区字段自己生成的时间维度作为过滤条件

以mysql数据库表创建分区为例进行说明

连接到mysql数据库中创建表:orders_partition,同时给设置好分区,如下图:

...

7、去到mysql数据库中,使用explain +上一步复制的SQL的语句,执行,查看命中了哪个分区:

看下图可以看到是命中了"p202002"区。


3.4  分区字段为日期:在事实表上设置了分区字段,使用关联的维表的时间维度作为过滤条件

以3.3创建的数据模型为例说明。

1、在模型中增加”日期表“作为orders_partition的维表,如下图:

...

4、去到系统监控/SQL/MDX监控中查看并复制运行的取数SQL语句;去到mysql数据库中,使用explain +上一步复制的SQL的语句,执行,查看命中了哪个分区:

看下图可以看到是命中了"p_future"区。



3.5  分区字段是”整形“情况

界面操作、逻辑与3.1、3.2章节一致。


4 报表层哪些操作符能命中分区

  • 过滤操作符限制:部分过滤操作符在特定场景下不支持命中分区。以 “年月” 分区字段为例,“不等于”“not in” 等操作符,在开发实际中无法做到命中分区;“like” 操作符对字符串日期字段作过滤条件时也不支持命中分区 。

...