【问题标题】:Azure Data factory Dataset From a StoredProcedure来自 StoredProcedure 的 Azure 数据工厂数据集
【发布时间】:2017-06-08 17:27:39
【问题描述】:

我的目标是通过存储过程将数据从一个 SQl azure 数据库(User DB)传递到另一个 SQl azure 数据库(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"
    }
}

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

【问题讨论】:

    标签: azure azure-data-factory


    【解决方案1】:

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

    如果我正在构建数据工厂,我会采取这些步骤...

    1. 为完整起见,定义存储过程使用的每个表的数据集。
    2. 第一个管道。有一个活动调用存储过程,该过程执行输入数据集的连接并输出到第一个 Azure SQL 数据库实例上的新暂存表(在此处执行 SQL INSERT INTO ... SELECT...)。
    3. 在 ADF 中为临时表定义输出数据集(proc 结果)。
    4. 第二个管道。将第 3 点中的输出临时表中的复制活动作为输入。然后输出到第二个 Azure SQL 数据库实例上的表。
    5. 再次为最终目标表的 ADF 数据集提供完整性。

    复制活动弥补了跨数据库查询不可能和 SQL Server 链接服务器不存在的差距。

    图片帮助...

    (画技差请见谅)

    有意义吗? :-) 很好,加油。

    【讨论】:

    • 谢谢!我听从了你的建议并开始工作
    • 很好,很乐意提供帮助
    • 存储过程的任何示例或链接?
    • 已在 ADF 中为暂存表定义了输出数据集(proc 结果)?这实际上是数据库(源)中的物理表吗?
    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2016-03-27
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2015-02-21
    • 1970-01-01
    相关资源
    最近更新 更多