Azure 数据工厂有两个 Azure Sql 以交替方式接收和加载数据
Azure Data Factory Having Two Azure Sql Sink and Load data in Alternate fashion
我有两个必须从 On Premise Sql 数据库加载的 Azure Sql 接收器,两者都以交替方式加载,一旦加载成功就由应用服务切换。
我正在寻找各种方法来支持两个接收器并以这种方式构建我的管道,以便它可以以交替方式加载数据并确定要使用哪个接收器。我们是否认为我们必须使用两个数据管道或单个管道可以同时使用(通过一些 if /else,在数据库中有一个标志等)?
期待对此有更多意见。
谢谢
Xsl 家伙
如果没有特定的行为,很难回答您的问题。但是由于源是本地 SQL 服务器,您不能使用数据流,它不支持自托管集成运行时。这意味着您不能为一个源创建一两个接收器。
您的目的是将数据从本地 SQL 服务器复制到 Azure SQL 数据库,您必须创建两个具有相同源和不同 Azure SQL 接收器的并行复制活动,例如吼叫:
按照你的逻辑,恐怕数据工厂做不到。它更专注于数据传输,无法帮助您更改接收器数据库状态。
在两个 Sql 数据库(Sink SQL1 和 SQL2)中创建新的 table 用于维护标志(这里在将源复制到接收器之后我们可以更新更新时间)
在 Sink SQL1 和 SQL2 上创建一个存储过程,它将通过查找调用 activity。
为 Sink SQL1 & SQL2 source 和 sink sql1 & sql2 创建链接服务。
为源和接收器 SQL1 和 SQL2 创建数据集。
创建管道 添加两个查找 activity SQL1 和 SQL2 此查找 activity 从接收器 sql1 和 sql2 中获取 lastupdatedtime。
在管道中添加If条件activity,并在If条件activity中连接SQL2和SQL2。 Select Activity 选项卡并动态添加表达式 -> select 逻辑函数 -> greaterthanorequal。在添加动态内容中显示 “@greaterOrEquals()” 在添加 Activity Outputs -> Lookup_activity_sql1 in () 之后。然后添加动态容器显示 “@greaterOrEquals(activity('Lookup_activity_sql1').output)” 在这里输出后你可以添加 Lookup activity 输出值有“lastupdatetime”。 “activity(‘Lookup_activity_sql1’).output.lastupdatetime”。就像在添加动态值中添加 SQL2 值一样,如下图所示。
在 If 条件 True & false Activity 中添加一个副本 activity 和存储过程 Activity。这里 If Condition activity 检查 Lookup sql1 & sql2 的大于值。如果为 True,我们将在 True 活动中为源和接收器 SQL1 执行复制 activity 和存储过程 activity。否则我们将在 False Activities 中为源和 Sink SQL2 执行复制和存储过程activity。
在存储过程 activity 中,我们使用相应的 Sink SQL1 和 SQL2 更新标志 Table 中的最新时间。您可以在 Sink SQL1 和 SQL2 中添加以下存储过程。
一些额外的实现方式:
例如,
- 如果 active/passive 按计划交换,那么我们可以创建一个 ADF 触发器来匹配计划。
- 如果 active/passive 交换时发生了一些“挂钩”或“事件”,我们可以使用 ADF 启动管道 运行 和正确的接收器名称。 ADF 的 SDK / API 可用于启动管道。
- 如果我们使用 tumbling window 触发依赖,我们可以让下一个数据加载,只有在上一个数据加载的情况下。这将防止一个水槽超出另一个水槽。
我有两个必须从 On Premise Sql 数据库加载的 Azure Sql 接收器,两者都以交替方式加载,一旦加载成功就由应用服务切换。 我正在寻找各种方法来支持两个接收器并以这种方式构建我的管道,以便它可以以交替方式加载数据并确定要使用哪个接收器。我们是否认为我们必须使用两个数据管道或单个管道可以同时使用(通过一些 if /else,在数据库中有一个标志等)? 期待对此有更多意见。
谢谢 Xsl 家伙
如果没有特定的行为,很难回答您的问题。但是由于源是本地 SQL 服务器,您不能使用数据流,它不支持自托管集成运行时。这意味着您不能为一个源创建一两个接收器。
您的目的是将数据从本地 SQL 服务器复制到 Azure SQL 数据库,您必须创建两个具有相同源和不同 Azure SQL 接收器的并行复制活动,例如吼叫:
按照你的逻辑,恐怕数据工厂做不到。它更专注于数据传输,无法帮助您更改接收器数据库状态。
在两个 Sql 数据库(Sink SQL1 和 SQL2)中创建新的 table 用于维护标志(这里在将源复制到接收器之后我们可以更新更新时间)
在 Sink SQL1 和 SQL2 上创建一个存储过程,它将通过查找调用 activity。
为 Sink SQL1 & SQL2 source 和 sink sql1 & sql2 创建链接服务。
为源和接收器 SQL1 和 SQL2 创建数据集。
创建管道 添加两个查找 activity SQL1 和 SQL2 此查找 activity 从接收器 sql1 和 sql2 中获取 lastupdatedtime。
在管道中添加If条件activity,并在If条件activity中连接SQL2和SQL2。 Select Activity 选项卡并动态添加表达式 -> select 逻辑函数 -> greaterthanorequal。在添加动态内容中显示 “@greaterOrEquals()” 在添加 Activity Outputs -> Lookup_activity_sql1 in () 之后。然后添加动态容器显示 “@greaterOrEquals(activity('Lookup_activity_sql1').output)” 在这里输出后你可以添加 Lookup activity 输出值有“lastupdatetime”。 “activity(‘Lookup_activity_sql1’).output.lastupdatetime”。就像在添加动态值中添加 SQL2 值一样,如下图所示。
在 If 条件 True & false Activity 中添加一个副本 activity 和存储过程 Activity。这里 If Condition activity 检查 Lookup sql1 & sql2 的大于值。如果为 True,我们将在 True 活动中为源和接收器 SQL1 执行复制 activity 和存储过程 activity。否则我们将在 False Activities 中为源和 Sink SQL2 执行复制和存储过程activity。
在存储过程 activity 中,我们使用相应的 Sink SQL1 和 SQL2 更新标志 Table 中的最新时间。您可以在 Sink SQL1 和 SQL2 中添加以下存储过程。
一些额外的实现方式:
例如,
- 如果 active/passive 按计划交换,那么我们可以创建一个 ADF 触发器来匹配计划。
- 如果 active/passive 交换时发生了一些“挂钩”或“事件”,我们可以使用 ADF 启动管道 运行 和正确的接收器名称。 ADF 的 SDK / API 可用于启动管道。
- 如果我们使用 tumbling window 触发依赖,我们可以让下一个数据加载,只有在上一个数据加载的情况下。这将防止一个水槽超出另一个水槽。