Azure IR Копирование из Onprem напрямую в Azure SQL - PullRequest
0 голосов
/ 30 января 2019

Я настроил IR на локальном сервере sql и подключил его к моей фабрике данных v2, тестовый запуск успешно скопировал простую таблицу dbo.employee в хранилище BLOB-объектов.

Поскольку я копирую небольшое количествоДанные, из которых я хотел бы скопировать данные непосредственно из Prem SQL, в базу данных SQL Azure с помощью выбора.

Я следовал этому руководству - https://docs.microsoft.com/en-us/azure/data-factory/tutorial-hybrid-copy-powershell

Затем я создал конвейер сзадание на копирование, используя мой sqlserverdataset в качестве источника - Простая таблица сотрудников с 3 столбцами и 3 строками.

Я создал похожую таблицу на моем тестовом сервере Azure SQL Server с теми же столбцами и установил ее в качестве набора данных приемника,

Я не уверен, как структурировать хранимый процесс, который он запрашивает в приемнике.

для целей тестирования я создал sp на своем лазурном sql как

CREATEПРОЦЕДУРА spCopyFromOnPremToAzure AS НАЧИНАЕТ ВСТАВИТЬ [dbo]. [TestEmployee] SELECT * FROM [dbo]. [Employee] END

и использует его в качестве процесса в приемнике.для типа таблицы я использовал TABLE

при отображении. Я вижу, что столбцы источника и назначения сопоставлены.

Я запустил конвейер, который затем завершился ошибкой,

SOURCE

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

Я предполагаю, что это связано ссохраненный процесс, как бы я структурировал его, чтобы сделать основной выбор из источника и скопировать в приемник?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Мне удалось заставить это работать - потребовал проб и ошибок, но теперь я знаю.При использовании конвейера копирования данных мастера мне просто нужно было выбрать исходные и конечные наборы данных, каждый из которых имел собственный LinkedService - и это работало на 100%.

Я также могу указать запрос таким образом.Мне просто нужно было понять, что каждый набор данных требует связанного сервиса.Большое спасибо

0 голосов
/ 30 января 2019

В вашем случае, кажется, вам не нужна хранимая процедура.Достаточно просто указать имя таблицы в наборе данных.

Пожалуйста, пройдите этот документ.У этого также есть пример для хранимой процедуры.https://docs.microsoft.com/en-us/azure/data-factory/connector-azure-sql-database#invoking-stored-procedure-for-sql-sink

...