当文件到达服务器时如何启动 DataStage 序列作业

How to start a DataStage Sequence job when a when file comes to the server

我希望构建一个进程,当任何文件到达服务器的着陆区时,该进程都会触发 DataStage Sequencer 作业。 CA7 是调度程序,文件命名约定有许多不同的风格,包括文件扩展名。此外,一些文件命名约定包含日期时间戳。我是这个 activity 的新手,所以如果我提出愚蠢的后续问题,请多多包涵。

在此先感谢您的帮助。

检查序列

中的Wait for File stage

它有等待文件出现(或消失)的选项和超时前的时间限制。所以你必须在某个时间开始工作,但处理将在文件出现后开始。 虽然该阶段需要一个文件名 - 但您可以执行 ls 或类似命令来获取文件名并将其作为参数发送到您的作业。

如果您需要即时处理一些很少的文件,可以使用等待文件阶段并提前安排。如果以更大的时间间隔处理文件没问题,您可以将作业安排为每个时间间隔 运行,例如每天一次、每小时一次或每分钟一次,然后处理文件夹中的所有文件。

您提到您必须处理许多不同的文件名和扩展名。我假设它们也具有不同的结构。谨防试图建立可以处理所有事情的工作。

根据您希望处理的文件的频率、类型和数量,您可以通过多种方法来获得最佳性能:要么循环 几个文件 按文件顺序-file 并在每个文件上做复杂的事情,或者在并行作业中一次读取 许多文件 。在循环中有多个作业的序列中循环播放大量文件可能会导致很长的咖啡休息时间。

如果任务只是移动文件,也许 shell 脚本(-> 命令阶段)是您的朋友。

但是如果你有大量相同结构的文件(不管什么名字)(比如 csv 文件)并且你需要数据库中的内容,那么你可以在并行作业中一次读取它们sequential file stage 并将它们直接保存到 dataset 中。该阶段允许您按模式 select 文件(在这种情况下,* 是您的朋友)并且它可以将文件名输出到新字段。所以你最终会得到一个包含你的数据和相应文件名的数据集。

即使文件结构不同,您也可以将整个文件内容输出到一个 lob 列中,仍然可以在一个作业中处理所有读取。

如果动态命名数据集,则可以安排另一个独立作业并行处理数据集队列以进行进一步处理。