【发布时间】:2015-07-17 17:12:17
【问题描述】:
我正在开发一个 SSIS 2012 DTS,它必须 ETL 数据从 csv 到 DB。
每天都会提供 csv 文件,其发布日期将在文件名中显示:filename_YYMMDD.csv。
当然,它不能多次处理同一个文件,这样数据就不会在 DB 上重复。问题是我在处理文件时无法删除或重命名文件。我必须处理我还没有处理过的文件,不要管旧的。
我正在考虑在处理文件时使用日志表来存储文件的日期。在 FLC 开始时,我向 DB 查询当前文件的日期。如果在日志表中找不到日期,FLC 将运行 ETL。如果找到日期,FLC 会跳到下一个文件。
有可能吗?我应该用脚本任务来做吗?如何将 continue 命令从脚本任务发送到 FLC 循环?或者我可以通过执行 SQL 任务以某种方式做到这一点吗?
【问题讨论】:
-
当然你可以通过执行 SQL 任务来完成。无需发送 continue 命令,ForEach 循环将在其中的所有任务完成后转到下一个文件。
-
我的意思是,在 EST 之后,如果确定文件已经被处理,FLC 必须停止当前迭代并开始下一个迭代,而不是执行它直到结束。我所说的 continue 命令相当于 C 循环中的
continue。 -
在您的问题中,您声明:` 在 FLC 的开头,我向 DB 查询当前文件的日期。如果在日志表上找不到日期,FLC 将运行 ETL。` 所以我再说一遍,你不需要继续。一个文件处理完后,会自动转到下一个。它将再次检查该文件是否已被处理,如果是,则跳过它并转到下一个,并继续这样做,直到没有更多文件要处理。
-
是的,就是这样。正确的英文单词应该跳过而不是继续。我只是在思考循环如何在 C 关键字 C 中工作。
标签: sql-server csv ssis etl dts