|
日常做数据报表时,你是不是也遇到过这些困扰? “业务系统数据太多,直接查询卡到崩溃”、“不同系统数据分散,整合起来太费劲”、“实时查询影响业务系统性能,被IT部门叫停”…… 其实这些问题,用SmartBI的数据抽取功能就能轻松解决!今天就带大家从0到1搞懂数据抽取,帮你快速上手,高效搞定数据抽取使用问题~
一、数据抽取作用
数据抽取是指从源数据库中抽取原始数据到高速缓存库,它可以保证秒级获取大级别量的数据结果,提高系统性能。

二、高速缓存库使用
如上所说,数据抽取是抽取到高速缓存库的,高速缓存库是Smartbi 提供的对数据查询进行缓存和提速的功能,为了解决用户原始数据库查询慢并且不好解决的场景,可以通过定时抽取把数据缓存到缓存库,提升报表的查询性能,所以我们需先确保高缓存库的可用性。
另外,高速缓存库本质也是一个数据库服务,需部署了对应数据库,再进行配置。
数据连接——system下找到高速缓存库,双击或右键打开,根据实际情况配置好,点击测试连接通过后保存使用:

高速缓存库的支持和配置详情可看:高速缓存库
三、抽取机制
(1)数据集或分析确定结果字段,发起数据抽取指令后,从源数据库中将字段的所有数据抽取到高速缓存库。
(2)再次查询当前数据集或分析的数据时,从高速缓存库获取数据。
注意事项:
抽取线程设置可以自定义跳转抽取并发数量,到系统运维设置-系统选项-性能优化可查看和微调整,不过考虑到自定义设置太大容易导致服务器内存不够,建议还是自动优化计算分配即可。
抽取
|
抽取并发线程数
|
用于设置对单个数据集的抽取的并发数量。
数据模型引擎V2.0上的抽取不支持多线程。
|
单线程抽取数据行数
|
用于设置每个线程的抽取数据量。
|

四、支持数据抽取功能的模块
(1)数据集类
- V10 及以上版本:数据准备模块默认支持数据模型的抽取设置;

- 低版本或开启旧数据集的高版本,除数据模型外,还支持以下旧数据集类型的抽取设置:自助数据集、可视化数据集、SQL数据集、原生SQL数据集、存储过程数据集、Java数据集、即席查询数据集【旧即席查询】、透视分析数据集【旧透视分析】,详情可看:旧数据集数据抽取如何配置
(2)ETL功能
ETL资源,输出目标节点选直接输出到高速缓存库:

(3)强制需使用到抽取的功能
1)例如使用了以上不支持直连的存储过程查询,会提示:由于以下查询只支持抽取模式,数据模型无法切换成直连模式:“存储过程查询” 并强制抽取:

2)使用ETL高级查询或普通子查询右键“转换为ETL高级查询”,会默认强制输出到MPP:

3)模型内添加不同来源业务库的数据进行整合处理,添加或切换会提示:数据模型不支持跨库直连模式,如果要添加选择的表或视图,必须切换成抽取模式,确定切换? 或 数据模型中的表/查询来源多个数据库,暂不支持直连模式:

五、数据模型抽取类型
数据模型抽取的整体逻辑简单介绍:
- 先把数据模型每个查询的数据写入到CSV文件。
- 再把CSV文件导入到MPP对应的临时表中。
- 等把所有的查询都数据“拷贝”到MPP中后,再把MPP中每个查询的数据导入到大宽表中(根据模型基数关系生成的大宽表),其中引擎V2.0是生成小宽表,如果其中一个查询“导入”数据失败,抽取就算失败。
分全量抽取、增量抽取和查询动态抽取【按次抽取】,各类型适用场景对比说明:
抽取类型
|
适用场景
|
全量抽取
|
1、数据量较小,抽取速度快,不会很影响性能; 2、数据更新不频繁; 3、对数据一致性要求高,不希望出现遗漏或差异;
|
增量抽取
|
常用于频繁更新且数据量比较大的表: 1、历史数据不会变动 --入库方式可以使用“追加”; 2、表内有“时间戳”字段,可用来和"更新时间"做对比实现增量更新,–入库方式可以使用“更新与插入”; 3、适用于需要定期更新历史数据并追加新数据的场景(例如:每日回溯近 7 天数据,清除历史数据后重新抽取 7 天最新数据);
|
查询动态抽取
|
1、需要对模型内个别子查询设置数据行权限控制的情况,例如对子查询SQL的where条件应用设置了数据行权限,查询动态抽取是根据登录用户本身的权限情况进行抽取,只能查看自己有权限的数据; 2、数据量比较大,需提前模型应用参数过滤减少一次性返回以提高查询性能,但希望切换参数实时查询对应数据可以采用查询动态抽取;
|
1、全量抽取
即全量覆盖抽取, 每次抽取的时候将表数据全部抽取至高速缓存库,如果缓存库已有数据,全量抽取会覆盖缓存库已有的数据。

注意事项:
- 如果使用参数 进行筛选,全量抽取会按照默认参数值抽取,在报表层,切换参数无法过滤到非默认值的数据导致切换参数失效,建议改用查询动态抽取或报表层级使用字段筛选器;
- 如果模型的查询是数据源表,并且在源表设置了行权限,全量抽取不会继承源表设置的行权限,需要重新在模型上设置,建议参考数据模型基于全量抽取实现数据权限管控使用;
2、增量抽取
例如数据库中有一张表,每天都会新增数据,这时候我们就可以使用增量抽取,只将每天新增的数据更新到高速缓存库表,这样就不需要更新整张数据表,节省了更新时间和更新资源。完整操作可参考详情。

增量数据获取方式:
增量入库方式:
注意事项:
3、查询动态抽取
主要是报表刷新时若切换的参数为未抽取过的新参数,或参数已过预设置好的有效期了,系统将自动触发重新抽取,然后相同权限的用户间,抽取结果共享,减少重复抽取,减少资源消耗。

数据有效期:当模型中设置了数据有效期,基于它做的报表,如果刷新的时候发现失效了,会重新抽取;如果失效了但是没有重新刷新不会重抽,直到下次刷新查询的时候才会重抽。
注意事项:
- 查询动态抽取(原:按次抽取):与计划任务无关,不需另外设置抽取计划,仅由刷新查询根据有效期触发;且在设置了查询动态抽取的情况下就算再设置了抽取计划,也还是会根据数据有效期设置判断失效后由刷新查询触发重抽;
- 2025.06.04之后的V11版本,ETL高级查询开始支持查询动态抽取;
- 如果模型里面的查询是数据源表,并且在源表设置了行权限,查询动态抽取会继承源表设置的行权限; 详参:数据模型行权限;
- 相同权限的用户间,抽取结果共享,减少重复抽取,减少资源消耗;
- 支持设定动态有效期(默认30分钟):可以自定义修改;如果超过了设置的时间,会自动清理旧表,刷新查询触发重新抽取;
- 报表刷新时,参数切换的触发逻辑如下:若切换的参数为未抽取过的新参数,或参数已过有效期,系统将自动触发重新抽取;用户重新登录,若参数不变且该参数此前已查询过且仍在有效期内,再次查询时不会触发重新抽取;
- 查询动态抽取适合数据量小的情况,如果数据量大,切换参数备选值都会抽取,比较耗时,影响用户体验;
4、示例演示说明
为了帮大家更好理解和实操,下面以「根据区域参数获取订单信息」为例,演示查询动态抽取的设置方法。具体操作步骤如下:
(1)下面以“根据区域动态获取订单信息” 进行介绍;
(2)在SQL查询查询订单表并应用 区域 参数, 如下图:

(3)保存SQL查询,并回到数据模型,创建参数,如下图,可参考 参数设置 创建参数:

(4)在抽取设置 设置为 查询动态抽取,并保存数据模型:

(5)去创建 透视分析 ,并把参数拖入到画布中,切换参数,组件可以根据参数动态展示数据:
- 如果是第一次切换的参数值,会从底层数据库取数,会触发抽取;如果后面再切换回原来的参数值,在数据有效期内不会重新取数,而是取缓存的数据。
- 如果有新的数据进来,可以退出账号重新登录再查看或者清空缓存。


5、分区设置
上面三种抽取类型都可以看到支持分区设置的,分区设置是为了把表数据相对平均分成多个分区,抽取程序会尽可能一个分区分配一个线程进行并行抽取,这样能够极大的提高大数据量情况下的数据抽取性能。另外,分区主要是为了加速查询使用的,比如通过设置日期-月分区,当查询的时候就直接去底层那个分区数据区获取数据了,而不需要扫描额外的数据。
注意事项:
(1)抽取的分区设置目前支持的MPP库:只有SmartbiMpp产品默认使用高速缓存库、StarRocks。
- 其中StarRocks的分区的设置: 目前不支持年季、年周,只支持年、年月、年月日,详细可查看StarRocks官网;
- 而SmartbiMpp支持年周的话,会与年季有冲突,所以SmartbiMpp也不支持年周。
- SmartbiMpp要求每次批量导入数据时不能跨越特别多的分区,默认分区上限是100,如果想要更多分区,可以通过修改SmartbiMpp的配置文件中参数max_partitions_per_insert_block来控制数量。
(2)分区设置仅支持抽取模式,支持的范围:全量抽取、增量抽取、查询动态抽取。
(3)具体示例说明
下面以示例说明分区设置的操作以及查看是否命中了分区:以产品内置的northwind数据库里面的【orders】、【orderdetails】为示例构建数据模型
1)把【orders】、【orderdetails】加载到数据模型中,并创建数据模型

2)保存好模型,设置模型为 抽取 模式,并设置【orders】为全量抽取,设置分区设置:

分区设置
|
选择日期或日期时间类型的字段作为分区依据时,系统会自动将数据分配到相应的分区表中。这样做不仅有助于更快的抽取数据,还能显著提升查询效率,特别是在进行大规模数据分析时。
温馨提示:
- 请选择一个在记录创建后几乎不发生变化的字段作为分区字段,例如记录的创建时间【也即作为分区字段存储的历史数据是固定不变的】。
- 避免使用那些在数据生命周期内可能会更新的字段(如最后修改时间),因为这会导致分区数据重复或不准确。
|
分区字段
|
目前只支持日期、日期时间字段,每次只能选择一个字段。
|
分区格式
|
选项:年、年季、年月、年月日。暂不支持年周,原因:starRocks不支持年周、年季,而SmartbiMpp支持年周的话 会与年季有冲突,所以没有支持
其中StarRocks的分区的设置: 目前不支持年季、年周,只支持年、年月、年月日,详细可查看官网:https://docs.starrocks.io/zh/docs/3.1/table_design/data_distribution/expression_partitioning/。
SmartbiMpp要求每次批量导入数据时不能跨越特别多的分区,默认分区上限是100,如果想要更多分区,可以通过修改clickhouse的配置文件中参数max_partitions_per_insert_block来控制数量。
max_partitions_per_insert_block设置方法:
方法一:配置文件设置
1)找到ClickHouse的配置文件,通常位于:
/etc/clickhouse-server/config.xml或/etc/clickhouse-server/users.xml
2)在配置文件中找到块,该块包含了ClickHouse的配置选项
3)在块中添加以下配置项:
1000
4)保存并关闭配置文件
5)重启ClickHouse服务,使配置生效。
方法二:会话级别设置
1)在ClickHouse客户端中连接到数据库。
2)在会话中执行以下SQL语句:
SET max_partitions_per_insert_block=1000(1000只是示意,可自行修改)
3)该设置将仅在当前会话中生效,适用于临时导入大量数据的情况。
|
3)设置好分区之后对模型进行抽取,点击【立即抽取】,再去“系统监控/SQL/MDX监控”查看到抽取到MPP表的表名,如下图:

4)使用数据库工具连接MPP库,使用下面的语句查看是否命中分区,如果查询有对应的数据,则分区成功

SELECT
partition,
name,
active
FROM system.parts
where table like '%o_662e015ae0aced9a870441ef1f3a2990_0_2%'
|
六、定时抽取设置
抽取设置后可设置定时抽取计划,抽取计划的触发类型就是时间,需要我们自定义设置的是:间隔类型、运行设置、失败重试机制、推送提醒,具体各配置项含义可参考:新建计划。
设置入口如下,抽取箭头展开选择抽取计划,点击进入设置界面即可:


七、常见抽取问题
(1)如何中断抽取
数据准备——抽取监控——找到正在同步内容——常用操作内处理:


(2)如何分析抽取失败原因
有时之前正常使用的数据集突然抽取失败了,我们如何快速定位到问题原因呢?可以去查看对应的抽取日志,根据日志报错信息去对应处理即可。
可以到数据抽取-抽取监控-找到失败内容的常用操作区查看日志看看:

若是数据模型类型,也可以编辑数据模型右上角查看抽取日志:

(3)能否设置禁用缓存
在抽取模式下,缓存会一直保留,直到数据模型重新抽取。
(4)电子表格报表数据集能否设置抽取
问题描述:
WEB电子表格或电子表格使用报表数据集创建模型查询或SQL查询时,有办法设置抽取吗?
解决方案:
不支持直接设置,建议使用数据模型设置抽取后,再基于抽取的数据模型去新建模型查询使用。

(5)如何优化抽取性能
在实际使用中,很多时候会有疑问:“数据量一大,抽取就变慢,怎么才能又快又稳?” 别担心,针对大数据量抽取性能优化这个高频痛点,我们整理了几个经过验证的实战示例,每一个都能直接参考使用。下面就通过具体案例,手把手教你如何从策略、配置到资源分配上,全方位提升抽取性能:
大数据量抽取性能优化
如何进行数据的增量抽取
大数据量查询优化:预计算(抽取模式)配置指南
大数据量查询优化:利用数据模型分区快速过滤数据
好啦,今天从 0 到 1 带你全面了解了 SmartBI 的数据抽取功能,是不是一下子就清晰多了?以后再遇到数据太多查询慢、跨系统整合难、怕影响生产库性能这些头疼问题,别再硬扛啦~直接用上数据抽取,报表更流畅、分析更安心、效率直接拉满! |