CREATE PROCEDURE
p_org_Extract
AS
DECLARE @sql VARCHAR(3000)
BEGIN
DECLARE @BeginDate
DATETIME,
@EndDate
DATETIME,
@TaskName
VARCHAR(32),
@Flag
INTEGER,
@Num
INTEGER,
@CurrDate
DATETIME
SELECT @Num = COUNT(TaskName) FROM
ExtractTaskList
WHERE UPPER(TaskName) = UPPER('test')
IF @Num != 1
INSERT INTO
ExtractTaskList(TaskName,IncType,TransType) VALUES('test',2,2)
--
获取列表中的当前任务的时间戳和状态
SELECT @BeginDate = SourceDate,@Flag = Flag
FROM ExtractTaskList WHERE TaskName='TEST'
--
如果上次执行未成功,这样取值效率会高一些,则从数据仓库表中直接读取
--TargetDate
和
SourceDate
可能会不一致
IF @Flag = 2 OR @Flag IS NULL
SELECT @BeginDate =
DATEADD(ss,1,MAX(closedate)) FROM TargetTable
--
如果数据仓库无数据,则从业务系统中直接读取,也可以设置一个默认的初始化时间
IF @BeginDate IS NULL
SELECT @BeginDate = MinLogDate FROM
OPENQUERY(SOURCE,'SELECT MIN(CloseDate) AS MinLogDate FROM SourceTable')
--
如果仍无数据,则表示无数据可抽取,退出执行
IF @BeginDate IS NULL
RETURN
--
抽取结束时间为当前时间前一天
,
每次循环抽取
1
天数据
,
可以更改
dd
为
hh
,变成按小时抽取
--
通常业务系统是连续的,如果有疑问也可以从业务系统中获取最大时间
SELECT @EndDate =
CONVERT(DATETIME,LEFT(CONVERT(VARCHAR,GETDATE(),120),10)+' 00:00:00')
--
更新当前开始时间和结束时间
UPDATE ExtractTaskList
SET TargetDate = @BeginDate,
SourceDate = @EndDate
WHERE UPPER(TaskName) = UPPER('test')
WHILE @BeginDate < @EndDate
BEGIN
SELECT @sql = ' INSERT INTO TargetTable
(
ID1,
ID2,
Measure1,
Measure2,
CloseDate
)SELECT *
FROM OPENQUERY(SOURCE,''select
ID1,
ID2,
Measure1,
Measure2,
CloseDate
FROM
SourceTable
WHERE CloseDate >=
TO_DATE(''''' + CONVERT(varchar,@BeginDate,120) + ''''', ''''YYYY-MM-DD
HH24:MI:SS'
+ ''''') AND CloseDate <
TO_DATE(''''' + CONVERT(varchar,DATEADD(day,1,@BeginDate),120) + ''''',
''''yyyy-mm-dd HH24:MI:SS'
+ ''''') AND CloseDate <
TO_DATE(''''' + CONVERT(varchar,@EndDate,120) + ''''', ''''YYYY-MM-DD
HH24:MI:SS' + ''''')'')'
--PRINT @sql
EXEC (@sql)
--
获取本次任务运行抽取的最大时间
IF DATEADD(day,1,@BeginDate)>@EndDate
SELECT @CurrDate = @EndDate
ELSE
SELECT @CurrDate =
DATEADD(day,1,@BeginDate)
--
如果
@sql
执行失败,同样记录状态和时间
IF @@ERROR <> 0
GOTO FAIL
--
记录每次运行的时间运行情况,可提供相应参考
UPDATE ExtractTaskList
SET TargetDate = @CurrDate,
Flag = 1
WHERE UPPER(TaskName) = UPPER('test')
SELECT @BeginDate =
DATEADD(DD,1,@BeginDate)
END
RETURN
FAIL:
--
记录错误
UPDATE ExtractTaskList
SET TargetDate = @CurrDate,
Flag = 2
WHERE UPPER(TaskName) = UPPER('test')
RETURN 0
END
|
相关推荐
关于数据增量抽取模拟实现原理,主要讲述ETL工具的增量数据记录的获取方式。
Kettle实现Oracle两表之间进行增量抽取数据,不需要时间戳!
ETL数据增量抽取方案,ETL数据增量抽取方案,ETL数据增量抽取方案
ETL中的数据增量抽取机制研究,数据仓库
关于对增量数据数据抽取的解决方案,挺有帮助
kettle增量抽取数据
Kettle增量抽取技巧
ETL数据增量抽取方案.zip ETL数据增量抽取方案.zip ETL数据增量抽取方案.zip ETL数据增量抽取方案.zip
前端增量发布.pdf————电子版_pdf版
ETL数据增量抽取方案.pdf ETL数据增量抽取方案.pdf ETL数据增量抽取方案.pdf
elasticsearch或kafka等数据抽取工具:logstash-5.6.1,可实现全量或增量的数据抽取,有需要可自行下载~
kettle抽取MySQL 增量数据 到 ES中 kettle抽取MySQL 增量数据 到 ES中 kettle抽取MySQL 增量数据 到 ES中 kettle抽取MySQL 增量数据 到 ES中 kettle抽取MySQL 增量数据 到 ES中 kettle抽取MySQL 增量数据 到 ES中 ...
kettle的使用手册,及个人实现的数据增量同步,亲测可行!
利用ETL工具实现从数据仓库的增量抽取
针对ETL增量抽取的方法进行了汇集,其中包括各种方法的优缺点,供大家参考。
Kettle数据抽取--增量抽取,详细操作教材
OGG增量抽取Oracle业务数据到kafka-部署手册
抽取增量数据算法说明,数据挖掘使用,非常通用的方法。
Informatica增量抽取图文介绍。每一步都有图片,不懂的可以联系我