2017-06-08 54 views
0

我的目标是通过存储过程通过从一个SQL Azure的数据库(用户DB)到另一个SQL Azure数据库(数据仓库)数据。天青数据工厂数据集从StoredProcedure的

我已经创建了两个链接服务,每一个DB。我怀疑这两个数据集。

在考虑中的存储过程从表中收集的数据和多个与其它表中的连接,并返回应当被存储在一个表中的数据仓库

的SP的结果是这样的:

ALTER PROCEDURE [DataWarehouse].[Item_init] 
AS 
BEGIN 
    SET NOCOUNT ON 
    SELECT Id, a.Name, Code, f.Name, s.Name, g.Name 
    FROM Item.Item a 
     join Item.Groupg on g.idGroup= a.idGroup 
     join Item.Subfam s on s.idSubfam = g.idSubfam 
     join Item.Fam f on f.idFam= s.idFam 

END 

从userDB的(我认为这是不正确的)收集数据,该数据集是这样的:

{ 
    "name": "ds_SProcItem_init", 
    "properties": { 
     "published": false, 
     "type": "AzureSqlTable", 
     "linkedServiceName": "UserTable", 
     "typeProperties": { 
      "tableName": "Item.Item" 
     }, 
     "availability": { 
      "frequency": "Hour", 
      "interval": 1 
     } 
    } 
} 

其他数据集:

{ 
    "name": "ds_DWItemOutput", 
    "properties": { 
     "published": false, 
     "type": "AzureSqlTable", 
     "linkedServiceName": "DataWareHouse", 
     "typeProperties": { 
      "tableName": "Item" 
     }, 
     "availability": { 
      "frequency": "Hour", 
      "interval": 1 
     } 
    } 
} 

传达的数据集上的管道如下:

{ 
    "name": "SprocItem_InitPipeline", 
    "properties": { 
     "activities": [ 
      { 
       "type": "SqlServerStoredProcedure", 
       "typeProperties": { 
        "storedProcedureName": "DataWarehouse.Item_init" 
       }, 
       "inputs": [ 
        { 
         "name": "ds_SProcItem_init" 
        } 
       ], 
       "outputs": [ 
        { 
         "name": "ds_DWItemOutput" 
        } 
       ], 
       "scheduler": { 
        "frequency": "Hour", 
        "interval": 1 
       }, 
       "name": "SprocItem_Init" 
      } 
     ], 
     "start": "2016-08-02T00:00:00Z", 
     "end": "2016-08-02T05:00:00Z", 
     "isPaused": false, 
     "hubName": "pruebasaas_hub", 
     "pipelineMode": "Scheduled" 
    } 
} 

请,有人谁知道的问题,你能帮帮我吗? 谢谢!

回答

0

鉴于Azure的SQL数据库的,我建议你需要在这里使用的副本活动,以及存储过程的限制。你需要在ADF想要工作的范围内处理这个问题。记住,这是不是SSIS :-)

如果我是建设数据工厂这些都是我会采取的步骤......

  1. 为了完整定义每个由存储使用的表的数据集程序。
  2. 第一条管道。在第一个Azure SQL数据库实例上有一个活动,它调用执行输入数据集连接并输出到新登台表的存储过程(在此处执行SQL INSERT INTO ... SELECT ...)。
  3. 将ADF中的输出数据集定义为临时表(proc结果)。
  4. 第二条管道。作为输入,从点3的输出登台表复制活动。然后输出到第二个Azure SQL数据库实例上的表。
  5. 同样为了完整性,最终目的地表的ADF数据集。

副本活动的桥梁,其中跨数据库查询是不可能和SQL Server链接服务器不存在的差距。

图片,以帮助...

(请原谅差的油漆技能)

enter image description here

有意义吗? :-) 好,破解。

+0

谢谢!我遵循你的建议,并得到它的工作 – Jsanchez

+0

伟大,高兴地帮助 –

+0

存储过程的任何例子或链接? – Arron