公司项目背景:我们从下载平台抽取数据,下载平台数据有时会延期,导致可能一天追跑十几天数据。
数据按照日期格式下发,每天一张。
用ODI遇到的难题,如何实现数据快速追跑,表名变化,不用同义词,视图,是否可以实现,如果不是oracle数据库,无法用DBLINK如何办?
深入研究ODI,最后功能实现
现提供想法如下,对ODI变量要仔细区分,刷新变量,设置变量,计算变量,生命变量。
利用设置变量实现在一个事物中表名随着追跑日期变化
知识模块改造如下。
(HIWAN LKM SQL to Oracle)自定义知识模块
主要淘汰掉在数据层反复写数据的过程
具体步奏如下
1.create target table
create table #TABLE_NAME_DATE
(
<%=snpRef.getTargetColList("", "[COL_NAME]\t[DEST_CRE_DT] " + snpRef.getInfo("DEST_DDL_NULL"), ",\n\t", "")%>
)
2.runcate target table
truncate table #TABLE_NAME_DATE
3.Load data to target table
select <%=odiRef.getPop("DISTINCT_ROWS")%>
<%=odiRef.getColList("", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", "")%>
from #TABLE_NAME_DATE #TABLE_NAME_DEMO
where (1=1)
<%=odiRef.getFilter()%>
<%=odiRef.getJoin()%>
<%=odiRef.getJrnFilter()%>
<%=odiRef.getGrpBy()%>
<%=odiRef.getHaving()%>
-----------------------------------------------------------------------------------
要插入的表名及抽取数据的表名用变量代替
----------------------------------------------------------------
如果在包中不需要一次追跑几天数据,则可以借助改造snpw表中SNP_TABLE中源表和目标表名实现。