创建日志文件,并在日志表中写入需要要做增量的表名和相关信息,具体信息看代码
Module Name: ETL增量数据更新功能 v1.0
Module Use: 增加需要做增量更新的新表
Create Author: wilson
Create Time: 2011-8-5
Modify Author: wilson
Modify Time: 2011-8-5
*************************************/
//开始: 增加新表
//注意1:如果不增加新表请注释掉这部分
//注意2:如果是第一次操作需要注释掉Load操作的UpdateLog.qvd部分,否则报错;
//格式: 需要增量的表名,最后更新时间,状态 0-成功 1,2,3,,4,,5,,6.。。更新行数 (可以用errorscript来获取)
//ADD_TABLE:
//
//LOAD SourceTables,
// LastUpdataTime,
// State,
// Rows
//FROM
//UpdateLog.qvd
//(qvd);
//
//LOAD * INLINE [
// SourceTables,LastUpdataTime,State,Rows
// XF_QOHBAL,2000-1-1 00:00:00,0,0
//];
//Store ADD_TABLE into UpdateLog.qvd;
//Drop Table ADD_TABLE;
//结束:增加新表
实现通过日志文件,读取表的最后更新日期,并赋值到变量后开始增量更新操作,最后按更新日期写入到日志文件,具体表名和日期段需要做更改。
Module Name: ETL增量数据更新功能 v1.0
Module Use: 单表实现增量更新
Create Author: wilson
Create Time: 2011-8-5
Modify Author: wilson
Modify Time: 2011-8-5
*************************************/
Let nowdate=Date(Now(),'YYYY-MM-DD')&' '&Time(Now(),'h:mm:ss'); //第一次执行增量,注意时间变量,与实际执行时间中间的时间差
//开始:增量更新功能
///这部分查询最后日志表的最后更新日期 并赋值到变量 Endtime 中
SELECT_UPDATALOG:
LOAD SourceTables as st,
LastUpdataTime as lut,
State as s,
Rows as r
FROM
UpdateLog.qvd
(qvd);
ADD_UPDATALOG:
LOAD
st as SourceTables,
lut as LastUpdataTime,
s as State,
r as Rows
resident
SELECT_UPDATALOG order by lut Desc; //这里要更改条件 //注意表名
Let Endtime=FieldValue('LastUpdataTime',1);
///变量赋值完成
////开始增量更新操作 通过where条件把日期变量带进去
XF_ITEMDM:
SQL select * from XF_ITEMDM where XF_LASTMODTIME4SYNC<=to_date('$(nowdate)','yyyy/mm/dd hh24:mi:ss') order by XF_LASTMODTIME4SYNC; //这里的条件要注意 第一次调用$(nowdate)变量,以后就调用'$(Endtime) 变量
///第一次更新数据不要加载下面的这个load操作 ,第二次以后就必须更新load了
//Concatenate (XF_ITEMDM) LOAD *
//FROM
//XF_ITEMDM.qvd
//(qvd);
Store XF_ITEMDM into XF_ITEMDM.qvd; //注意表名
Drop table XF_ITEMDM; //注意表名
////结束增量更新操作
///开始构造写入日志记录表
//ADD_UPDATALOG:
Concatenate (ADD_UPDATALOG) LOAD
'XF_ITEMDM' as SourceTables, //注意表名
'$(nowdate)' as LastUpdataTime,
'0' AS State,
Count(XF_LASTMODTIME4SYNC) AS Rows
FROM
XF_ITEMDM.qvd //注意表名
(qvd);
///add日志表
Store ADD_UPDATALOG into UpdateLog.qvd;
Drop table SELECT_UPDATALOG;
//Drop table ADD_UPDATALOG;
//结束:增量更新功能
总结:此方法目前在功能上,只实现了量上的更新,如果在配合inner jion ,keep的话就可以实现数据修改的更新。
还有更新的状态那个地方可以用Set ErrorMode 和ScriptError来获取文件执行的状态,这样就可以真实的记录到执行状态到日志,如果表数据量很大,且几个表都第一次做增量的话,请注意一下时间差。
| 昵称 密码 游客无需密码 |
| 网址 电邮 注册 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |








