1 概述
在数据处理与分析场景中,当数据量庞大时,查询效率成为关键问题。
当用户在数据源库中设置了分区,也想在Smartbi 查询报表时,能直接命中分区,使查询语句能快速定位到所需数据,从而大幅提升查询性能。
所以推出了新功能,该功能允许用户在数据连接和数据模型中配置分区字段相关信息,确保查询时能精准命中分区,减少数据库压力,提升系统整体运行效率。
2 适合场景
3 场景限制
- 分区字段仅支持整型、字符串、日期类型。其他数据类型的字段无法设为分区字段。
- 过滤操作符限制:部分过滤操作符在特定场景下不支持命中分区。以 “年月” 分区字段为例,“不等于”“not in” 等操作符,在开发实际中无法做到命中分区;“like” 操作符对字符串日期字段作过滤条件时也不支持命中分区 。详情可查看:。
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的维表,如下图:
...
6、通过在数据库执行取数逻辑,可以看到也能命中分区:
3.5 分区字段整形
逻辑与3.1、3.2章节一致。
4 报表层哪些操作符能命中分区
- 过滤操作符限制:部分过滤操作符在特定场景下不支持命中分区。以 “年月” 分区字段为例,“不等于”“not in” 等操作符,在开发实际中无法做到命中分区;“like” 操作符对字符串日期字段作过滤条件时也不支持命中分区 。
查询中指定的过滤字段 | 操作符 | |
年(例:2024) 年月日(例:2024-09-29) 年月(例:2024-09) 年季(列:2024Q1) | =、in | 支持 |
> | ||
>= | ||
< | ||
<= | ||
!=、not in | 不支持 |
...