来自StoredProcedure的Azure数据工厂数据集

时间:2017-06-08 08:45:04

标签: azure azure-data-factory

我的目标是通过存储过程将数据从一个SQl azure数据库(用户数据库)传递到另一个SQl azure数据库(Datawarehouse)。

我创建了两个链接的服务,每个数据库一个。我怀疑的两个DataSet。

有问题的存储过程从表中收集数据,并与其他表进行多次连接,并返回应存储在Datawarehouse中的表中的结果

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"
    }
}

请知道这个问题的人,你能帮助我吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

鉴于Azure SQL DB的限制,我建议您需要在此处使用复制活动以及存储过程。您需要在ADF想要工作的范围内处理此问题。记住这不是SSIS: - )

如果我正在构建数据工厂,那么这就是我要采取的步骤......

  1. 为了完整性,请定义存储过程使用的每个表的数据集。
  2. 第一个管道。有一个活动调用存储过程来执行输入数据集的连接并输出到第一个Azure SQL数据库实例上的新临时表(执行SQL INSERT INTO ... SELECT ... here)。
  3. 在ADF中定义用于登台表的输出数据集(proc结果)。
  4. 第二条管道。从第3点的输出登台表中获取复制活动作为输入。然后输出到第二个Azure SQL数据库实例上的表。
  5. 再次为完整性确定最终目标表的ADF数据集。
  6. 复制活动填补了无法进行跨数据库查询且SQL Server链接服务器不存在的空白。

    图片帮助...

    (请原谅可怜的油漆技巧)

    enter image description here

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

相关问题