我已经在本地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中进行基本选择并复制到接收器?
答案 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%工作。
我也可以通过这种方式指定查询。我只需要了解每个数据集都需要链接服务。非常感谢