0

我有一个要求,将 3 个不同的文件加载到具有 3 个不同 PIPE 的单个表中。我希望仅在将所有 3 个文件加载到我的阶段后才触发目标进程。

我不想多次运行我的目标进程。

那么有什么方法可以让我们在 PIPE 成功上获得任务的开始条件。

我去了文档,但没有找到任何这样的信息,或者有没有办法实现它,我可能会错过。

4

1 回答 1

1

实现这种模式的一般方法是使用。您的管道将加载到三个单独的表中,每个表上都有一个流。然后,您可以让任务按计划运行,使用SYSTEM$STREAM_HAS_DATA设置 WHEN 参数,运行 3 次。这可确保您的 TASK 仅在所有三个管道都成功完成时运行。例子:

CREATE TASK mytask1
 WAREHOUSE = mywh
  SCHEDULE = '5 minute'
WHEN
  SYSTEM$STREAM_HAS_DATA('MYSTREAM') AND SYSTEM$STREAM_HAS_DATA('MYSTREAM2')
  AND SYSTEM$STREAM_HAS_DATA('MYSTREAM3')
AS
  <Do stuff.>;

你有几个选择。你可以:

  1. 使用流中的数据在任务中做任何你想做的事情,或者
  2. 您可以使用流中的数据来填充三个管道最初填充的单个表。

如果您选择选项 1,那么您可能还希望创建一个替换原始单个表的视图。

如果您选择选项 2,您可以设置一个使用 AFTER 子句运行的任务来执行您想要执行的任何操作。

于 2020-07-23T07:59:01.217 回答