覆盖主要内容
版本: 下个版本

维度查询/更新

组件介绍

维度查询/更新组件主要涉及数据仓库中的缓慢变化维的概念。缓慢变化维,是由于维度在实际业务场景中并不是静态的,会随着时间发生缓慢的变化,相比于事实表或者业务表,主要区别在于维度表变化慢,频率低,特定场景下需要记录数据变化的过程。维度查找/更新步骤允许您实现 Ralph Kimball 两种类型缓慢变化的维度:类型 I(更新)和类型 II(插入)以及一些附加功能。您不仅可以使用此步骤来更新维度表,还可用于查找维度中的值。


  • 输入:数据库中的所有数据
  • 输出:数据库中经过查找/更新操作后的所有数据

页面介绍

运行维度查询/更新组件得到下图所示的界面:

参数选项

维度查询/更新组件页面包含如下通用选项:

选项说明样例值
步骤名称在画布上指定维度查询/更新步骤的唯一名称,可以自定义名称或保留默认名称。维度查询/更新
更新维度吗?如果勾选,则进行插入/更新操作;如果未勾选,则该组件仅作查询用途,查询条件:a、关键字页面中的的对比字段;b、查询/更新字段页面中的时间流查询条件,开始日期<=stream日期字段<=截止日期字段
数据库连接维度表所在的数据库连接的名称。
目标模式允许指定模式名称
目标表维度表的名称
使用缓存使用缓存目的为了提升插入或更新的效率,该选项和“缓存行数”同步使用
预加载缓存在执行查找之前,可以通过读取维度表的完整内容来提高性能。通过消除到数据库的往返行程和排序列表查找算法来提高性能
行中的缓存大小将持有的存储中的行数的缓存大小,通过减少到数据库的往返次数来加快查找速度

维度查询/更新关键字表格包含如下选项:

选项说明样例值
维字段在源系统中使用的键字段。例如:客户号、产品ID等。
流里的字段包含从源系统键字段获取的值的流字段。

维度查询/更新字段表格包含如下选项:

选项说明样例值
维字段包含维度实际信息的字段。
比较的流字段包含要分配给表字段的传入值的流字段。
更新的维度的类型应用的更新类型。

维度查询/更新关键字段表格包含如下选项:

选项说明样例值
代理关键字段由于会记录数据变化的历史过程信息,因此需在表设计初期定义代理键
新的名称自定义名称
创建代理键使用提供的三种方式中任意一种方式创建代理键:A:使用表最记录数+1 B:使用自增字段 C:使用sequenceA:使用表最记录数+1

维度查询/更新版本控制表格包含如下选项:

选项说明样例值
version字段每次keys相同的记录发生新增时,version字段自动+1,最大的verison为最新的记录version
stream日期字段记录数据流的日期范围,通常为设置为开始日期字段值即可
开始日期字段数据流导入的开始日期date_from
最小的年份可填写年份下限1900
使用另外一个可用的开始日期可选择提供的System date、Start date of transformation、Empty (null) value、A column value四个中任意一个
结束日期字段数据流导入结束日期date_to
最大的年份可填写年份上限2199

使用案例

案例数据

表数据与结构:user_source.sql

该文件共包含2条数据

列名 说明
user_id 主键
name 姓名

表数据与结构:user_dimension_table.sql

该文件共包含2条数据

列名 说明
agency_it 主键
user_id 用户表的主键
name 姓名
version 版本号
start_date 开始日期
end_date 结束日期

案例操作

案例总览 下述案例记录用户名字更替的过程,从user_source表中抽取数据,记录在user_dimension_table表中

表输入

使用表输入组件抽取源表的数据(用户主键,用户名),添加当前时间字段

SELECT
user_id
, name
,current_date() as ETL_Date
FROM sakila.user_source

维度查询/更新

使用维度查询/更新组件对表输入组件抽取的数据进行判断,用户名是否有变化,若有则增加新版本 该组件配置主要分 5 步:

  • 第一步:填写通用配置选项;
  • 第二步:填写关键字表,指定与源表中主键对应的流里的字段;
  • 第三步:填写字段表,指定要捕捉的源表中发生变化的字段;
  • 第四步:填写关键字段表,指定代理键或新增代理键;
  • 第五步:填写版本控制表,指定版本控制相关的选项;

阻塞数据直到Transform都完成

使用阻塞数据直到Transform都完成组件用于在执行sql前阻塞任务,否则sql脚本优先级较高

执行一个SQL脚本

使用执行一个SQL脚本组件执行sql删除user_id为空的数据

delete from user_dimension_table where user_id is null

结果预览

最终结果如下: