SSIS中不改动数仓设计时基于双列业务键查找代理键方法
数仓复合业务键Lookup代理键实现需求
项目背景
当前正在开展数据仓库项目,所有开发工作需严格遵循既定设计规范,相关设计、源表结构如下:
- 数仓部分设计参考:

- 源表结构参考:

源表字段唯一性规则:
entity字段本身不具备唯一性,仅当与COMMITTEE_TITLE字段组合时,可作为唯一记录标识。
核心待解决问题
按照数仓建设最佳实践,Lookup组件为推荐实现方案,需要通过合规的业务键从DIM_COMMITTE维度表查找代理键COMMITTEE_SRGT,关联后写入FACT_COMMITTEE事实表。
原有方案及驳回原因
此前的实现方案为:在staging层ETL流程中拼接entity、COMMITTEE_TITLE两个字段生成COMMITTE_BKEY字段,分别在staging层的事实预加载表、维度预加载表中新增该字段,基于该拼接字段即可直接完成Lookup关联。
两张staging表的建表脚本如下:
staging层ETL事实预加载表结构
CREATE TABLE [dbo].[STG_STR_COMMITTEES_MEETINGS]( [COMMITTE_BKEY] [nvarchar](520) NULL, [ENTITY] [nvarchar](255) NULL, [COMMITTEE_TITLE] [nvarchar](255) NULL, [NUMBER_MEETING_CONDUCTED] [int] NULL, [NUMBRER_MEETING_ATTENDED_BY_MEMBER] [int] NULL )
staging层ETL维度预加载表结构
CREATE TABLE [dbo].[STG_STR_COMMITTEES]( [COMMITTE_BKEY] [nvarchar](520) NULL, [ENTITY] [nvarchar](255) NULL, [COMMITTEE_TITLE] [nvarchar](255) NULL, [MEMBERSHIP_STATUS] [nvarchar](20) NULL, [START_DATE] [date] NULL, [END_DATE] [date] NULL, [MEMBERS_NAMES] [nvarchar](255) NULL )
该方案虽可简化Lookup操作,但因修改了维度表原有设计未被采纳。
方案诉求
需要在不改动数据仓库现有表设计的前提下,组合两列生成复合键,完成从维度表到事实表的代理键Lookup映射。
当前已编写的关联查询语句如下:
SELECT ISNULL(COMMITTEE_SRGT, 0) AS COMMITTEE_SRGT, cm.ENTITY, NUMBER_MEETING_CONDUCTED, NUMBRER_MEETING_ATTENDED_BY_SAAC_MEMBER FROM [dbo].[STG_STR_COMMITTEES_MEETINGS] cm LEFT JOIN [dbo].[STG_STR_COMMITTEES] c ON cm.ENTITY = c.ENTITY AND cm.COMMITTEE_TITLE = c.COMMITTEE_TITLE
内容的提问来源于stack exchange,提问作者Guissous Allaeddine
相关产品推荐
相关产品推荐

