从Onprem直接将Azure IR复制到Azure SQL

时间:2019-01-30 13:00:41

标签: azure azure-data-factory

我已经在本地sql服务器上设置了一个IR,并将其连接到我的Data factory v2,测试运行成功将一个简单的表dbo.employee复制到了Blob存储中。

因为我要复制少量数据,所以我想使用select将数据直接从prem SQL直接复制到SQL Azure数据库。

我遵循了本教程- https://docs.microsoft.com/en-us/azure/data-factory/tutorial-hybrid-copy-powershell

然后我使用sqlserverdataset作为源-具有3列3行的简单员工表创建了一个具有复制任务的管道。

我在azure sql服务器testemployeeee上创建了具有相同列的相似表,并将其设置为接收器数据集。

我不确定如何在接收器中构造其所请求的存储过程。

出于测试目的,我在我的azure sql上创建了一个sp

  

创建过程spCopyFromOnPremToAzure AS       开始          插入[dbo]。[TestEmployee]          SELECT * FROM [dbo]。[员工]       结束

并将其用作接收器中的proc。 对于表类型,我使用了TABLE

在映射下,我可以看到源列和目标列已映射。

我触发了随后失败的管道

来源

{
    "source": {
        "type": "SqlSource"
    },
    "sink": {
        "type": "SqlSink",
        "writeBatchSize": 10000,
        "sqlWriterStoredProcedureName": "[dbo].[spCopyFromOnPremToAzure]",
        "sqlWriterTableType": "TABLE"
    },
    "enableStaging": false,
    "translator": {
        "type": "TabularTranslator",
        "columnMappings": {
            "ID": "ID",
            "FirstName": "FirstName",
            "LastName": "LastName"
        }
    }
}

输出

{
    "dataRead": 62,
    "dataWritten": 0,
    "rowsRead": 3,
    "rowsCopied": 0,
    "copyDuration": 8,
    "throughput": 0.01,
    "errors": [
        {
            "Code": 11000,
            "Message": "'Type=System.Data.SqlClient.SqlException,Message=The procedure \"spCopyFromOnPremToAzure\" has no parameter named \"@[dbo].[TestEmployee]\".,Source=.Net SqlClient Data Provider,SqlErrorNumber=349,Class=16,ErrorCode=-2146232060,State=1,Errors=[{Class=16,Number=349,State=1,Message=The procedure \"spCopyFromOnPremToAzure\" has no parameter named \"@[dbo].[TestEmployee]\".,},],'",
            "EventType": 0,
            "Category": 5,
            "Data": {},
            "MsgId": null,
            "ExceptionType": null,
            "Source": null,
            "StackTrace": null,
            "InnerEventInfos": []
        }
    ],
    "effectiveIntegrationRuntime": "TestIR",
    "usedParallelCopies": 1,
    "executionDetails": [
        {
            "source": {
                "type": "SqlServer"
            },
            "sink": {
                "type": "AzureSqlDatabase"
            },
            "status": "Failed",
            "start": "2019-01-30T13:45:19.4402274Z",
            "duration": 8,
            "usedParallelCopies": 1,
            "detailedDurations": {
                "queuingDuration": 1,
                "timeToFirstByte": 0,
                "transferDuration": 7
            }
        }
    ]
}

错误

{
    "errorCode": "2200",
    "message": "'Type=System.Data.SqlClient.SqlException,Message=The procedure \"spCopyFromOnPremToAzure\" has no parameter named \"@[dbo].[TestEmployee]\".,Source=.Net SqlClient Data Provider,SqlErrorNumber=349,Class=16,ErrorCode=-2146232060,State=1,Errors=[{Class=16,Number=349,State=1,Message=The procedure \"spCopyFromOnPremToAzure\" has no parameter named \"@[dbo].[TestEmployee]\".,},],'",
    "failureType": "UserError",
    "target": "Copy Data1"
}

我假设这与存储的proc有关,我将如何构造它以从Source中进行基本选择并复制到接收器?

2 个答案:

答案 0 :(得分:0)

在你的情况,看来你并不需要存储过程。在数据集只设置表的名字就足够了。

请仔细阅读此文档。它还有一个存储过程的例子。 https://docs.microsoft.com/en-us/azure/data-factory/connector-azure-sql-database#invoking-stored-procedure-for-sql-sink

答案 1 :(得分:0)

我设法使它正常工作-进行了一些反复试验,但现在我知道了。 使用向导复制数据管道时,我只需要选择我的源数据集和目标数据集,每个数据集都有自己的LinkedService-并且可以100%工作。

我也可以通过这种方式指定查询。我只需要了解每个数据集都需要链接服务。非常感谢