分类(QlikView点滴)
QV中实现DB到QVD数据文件的增量更新功能(可以看到更新日志哦)
2011/08/10 14:52

创建日志文件,并在日志表中写入需要要做增量的表名和相关信息,具体信息看代码

程序代码
/*************************************
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来获取文件执行的状态,这样就可以真实的记录到执行状态到日志,如果表数据量很大,且几个表都第一次做增量的话,请注意一下时间差。

Tags: QlikView,QV9,QV10,VBScript,qvd,增量更新
相关日志:
正在读取相关日志,请等待...
+引用(0) |
发表评论
昵称  密码  游客无需密码
网址  电邮  注册
验证码 请输入左侧图片中的字符
记住我