通过SQL Server存储过程安排作业

时间:2019-05-11 14:10:31

标签: sql sql-server oracle azure azure-data-factory-2

我必须编写一个存储过程来安排Azure管道(作业)的时间。

  • 频率----一天中需要运行的批处理次数
  • 时间栏将输入批次开始时间

表A将具有批次的静态条目。频率表示一天中将运行多少次工作,并且“计时”列将批处理运行时间用逗号(,)隔开

Batch_ID   Batch_Name  Frequency    Timing 
-----------------------------------------------
1          ABC           2          7:00,13:00

表B将列出与一个特定批次对应的作业列表。此表将是静态的,并且具有与表B相同的一次条目。

表B

Batch_ID   JOB_ID       JOB_NM
--------------------------------
1            1           Job_1
1            2           Job_1

表C将批量包含作业的依赖关系

表C

Batch_ID    JOB_ID      DEPENDENY_JOB_ID
----------------------------------------
1             1
1             2              1

执行批处理时,将在表D中填充批处理开始时间。

表D

Batch_ID   Batch_Name   Status    start_Time   end_time
-------------------------------------------------------
1             abc       Start     7:00

表E填充后,表D中将填充作业详细信息。作业2仅在作业1完成时开始。

表E

Batch_ID   Batch_Name  JOB_ID    JOB_NM      Start_Time     End_Time
----------------------------------------------------------------------
1            abc         1        Job_1       7:00
1            abc         2        Job_2       7:15

作业2完成后,我们将更新表D的结束时间列。

第一次运行完成后,我们需要检查表A的频次列,然后再次运行该作业(如果大于1),然后再次执行整个练习。

如果第一批在批处理2的开始时间之前没有完成,那么我们必须保留第二批直到批处理1结束。

任何人都可以帮助我如何开始吗?

1 个答案:

答案 0 :(得分:0)

正如@Gordon Linoff所说,您对“问题”缺少疑问。

如果对此我能提出意见,我认为将您的逻辑在数据库中的数据工厂和存储过程之间划分不是一个好的设计思想。请注意,将来,维护管道的用户可能无法访问数据库,并且将无法理解其中的一半。即使您是一个保持这种状态的人,但从现在开始的两年后,您很可能会忘记所做的事情,而遵循两种资源之间的界限可能会花费您更多的时间。这也将使故障排除更加困难。

这实际上取决于您正在研究的场景,但总而言之:尝试将所有与逻辑相关的地方放在一个地方。

希望这对您有帮助!