我有一个要求,将 3 个不同的文件加载到具有 3 个不同 PIPE 的单个表中。我希望仅在将所有 3 个文件加载到我的阶段后才触发目标进程。
我不想多次运行我的目标进程。
那么有什么方法可以让我们在 PIPE 成功上获得任务的开始条件。
我去了文档,但没有找到任何这样的信息,或者有没有办法实现它,我可能会错过。
我有一个要求,将 3 个不同的文件加载到具有 3 个不同 PIPE 的单个表中。我希望仅在将所有 3 个文件加载到我的阶段后才触发目标进程。
我不想多次运行我的目标进程。
那么有什么方法可以让我们在 PIPE 成功上获得任务的开始条件。
我去了文档,但没有找到任何这样的信息,或者有没有办法实现它,我可能会错过。
实现这种模式的一般方法是使用流。您的管道将加载到三个单独的表中,每个表上都有一个流。然后,您可以让任务按计划运行,使用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,您可以设置一个使用 AFTER 子句运行的任务来执行您想要执行的任何操作。