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

Azure Data factory Dataset From a StoredProcedure

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

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

有问题的存储过程从 table 中收集数据并与其他 table 和 returns 进行多次连接,结果应存储在 table 中数据仓库

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收集数据的dataset(我觉得不对)是这样的:

{
    "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 SQL 数据库的限制,我建议您需要在此处使用副本 activity 以及存储过程。您需要在 ADF 想要如何工作的范围内处理这个问题。请记住这不是 SSIS :-)

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

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

副本 activity 弥合了跨数据库查询不可能和 SQL 服务器链接服务器不存在的差距。

图片帮助...

(画技不好请见谅)

有道理吗? :-) 好,加油。