在实际业务中,会有无法预先加工宽表来满足业务灵活多维分析诉求的场景。针对这类场景,指标平台提供了基于用户查询动态关联数据表查询的能力。
基于维度建模理论,通过单一事实来源与多维度表构建自动关联关系,在用户选择指标、维度时将会自动判断需要关联的数据表并动态生成关联SQL查询数据。
概念 | 说明 |
|---|---|
维度建模 | 维度模型是数仓设计的一种方法,旨在以业务视角构建组织数据,更易于面向数据分析场景。 |
事实表 | 存储业务过程中的事件或事实,例如支付金额、数量等,通常事实表内会保留一些退化维(各种id),作为关联维表的外键。 |
维表 | 描述事实表中度量数据的背景信息,如时间、地点、产品、客户等,通常维表会对应描述一个维度实体,这类维度实体会在事实表中保留一个退化维度(id)作为与维表的关联键。 |
主键 | 标识数据模型的唯一不重复行,在维表关联时,通常使用维表主键(一个或多个)与事实表中存储的外键进行关联。 |
外键 | 标识引用另外一张数据表的字段,在维度建模中通常为引用维表的主键字段。 |
星型模型 | 最简单的维度建模结构,由一个中心事实表和多个维表组成,维表之间相互独立没有层级关系,由于维表位于中心事实表周围类似星星的形状因此得名。 |
雪花模型 | 星型模型的扩展,维表可以进一步扩展多层级,用于更复杂的业务关系分析,如订单事实表中有包含商品的信息,同时商品维表中还有包含商品分类的描述信息等。 |
登录 DataLeap 控制台,进入指标平台。
在页面右上角的业务线下拉列表中,选择要管理的业务线。
选择指标管理 > 模型管理,进入模型管理页面。
单击新建模型按钮,在弹出的窗口中,设置参数信息,完成模型创建。详细配置说明可参见创建模型。
注意
当前仅部分模型支持动态关联,具体规则如下:
当选择的模型类型支持维度建模自动关联时,将会展示相应配置信息。
配置项 | 说明 |
|---|---|
模型类型 | 遵循维度建模理论,需要定义模型为事实表、维表。 |
自动关联 | 开启自动关联后,该模型才会按维度建模方式寻找可关联模型构建关联关系。 |
在定义关联维度时,可在详细配置弹窗中将维度设置为外键,相关参数说明可参见配置并发布模型。在模型发布后,系统将会自动寻找可关联的维表进行关联,自动关联逻辑请参见附录:自动关联逻辑说明。
维表同样可以设置外键,用以构建雪花模型。
注意
只有维表发布成功以后才会构建关联模型。
通常情况数仓设计维表都是全量快照维表,需要根据业务的查询需求来区分具体如何配置:
每次关联维表时,总以最新分区数据关联分析,此时需要设置维表的过滤条件。
例如:假设维表按日全量快照,时间(分区)字段为p_date,关联事实时要查询最新快照时,配置模型过滤条件为p_date='${last_date}'。
注:也可以根据诉求自定义使用时间变量选择查询分区,详细参考模型配置中有关时间变量的说明
系统将在查询时将替换时间变量,伪代码示意如下:
--快照维表查询SQL select f.p_date as `业务时间`, d.city as `维度A`, sum(f.amount) as `指标A` from ( select p_date, user_id, amount from 事实表 where p_date>='2024-01-01' and p_date<='2024-01-30' --分区条件下推 ) f left join ( select p_date, user_id, city from 维度表 where p_date='2024-01-30' --假设最新分区为2024-01-30 ) d on f.user_id=d.user_id where ... group by p_date,d.city
每次关联维表时,总以与事实业务时间对应的分区数据关联分析,此时需要将业务时间设置为维表主键,在关联时将会使用时间作为关联键关联。
注意
使用历史维度快照关联对引擎负载较大,查询性能较差,这类场景诉求建议直接加工汇总宽表分析
数仓针对缓慢变化维通常会设计拉链表存储以节省存储空间,此时在进行维度关联时有特殊的关联查询语法。拉链维表通常有两个时间字段,分别对应开链时间和封链时间,需要在业务时间配置处设置,详细说明可参见字段配置。
系统将在查询时针对拉链表做特殊适配,伪代码示意如下:
--拉链维表查询SQL select f.p_date as `业务时间`, d.city as `维度A`, sum(f.amount) as `指标A` from ( select p_date, user_id, amount from 事实表 where p_date>='2024-01-01' and p_date<='2024-01-30' --分区条件下推 ) f left join ( select user_id, city, start_date, --开链时间 end_date --封链时间 from 维度表 where end_date>'2024-01-01' --分区条件下推 ) d on f.user_id=d.user_id and f.p_date>=d.start_date and f.p_date<d.end_date where ... group by f.p_date,d.city
由于拉链表的特殊性,如果使用最新维度快照数据分析时,可以直接视为全量快照表(不需要用到特殊的开链、封链关联语句),只需要在维表模型过滤条件中指定最新分区即可。
例如:设拉链表开链字段为start_date、封链字段为end_date,关联事实时要查询最新快照时,配置模型过滤条件为end_date='9999-12-31'(仅示意,实际以etl中写死的封链时间为准)。
在进行维度模型构建时,会受限于专题指定路由的数据表,在不同专题配置的模型范围下有可能构建不同的维度模型,可以在指标字典 >指标专题 > 某个指标专题详情页 > 关联模型页签下,查看该专题下自动关联的维度模型以及模型上的详细字段信息。
关于维表和事实表自动关联有一定规则和限制约束,具体规则如下: