2017-12-20 3 views
1

Azure DataFactory V2에서 azure SQL DB에 저장 프로 시저를 실행하려고합니다. 이 절차는 플랫 테이블의 데이터를 사용하여 여러 테이블로 업 샘플링합니다. MS spcifications에 따르면 이러한 것을 만들기 위해 테이블 ​​값 매개 변수가 필요하지만 프로 시저와 모든 모델에 파이프 라인 작업을 연결합니다. 저장 프로 시저 만 실행하도록 데이터 집합 및 복사 작업을 정의하는 방법이 있습니까? 아래azure 데이터 팩토리에서 storedProcedure 실행

jsons 팔 템플릿에서 다음과 같습니다

DataSet:  
{"type": "datasets", 
      "name": "AzureSQLProcedureDS", 
      "dependsOn": [ 
      "[parameters('dataFactoryName')]", 
      "[parameters('destinationLinkedServiceName')]" 
      ], 
      "apiVersion": "[variables('apiVersion')]", 
      "properties": { 
      "type": "AzureSqlTable", 
      "linkedServiceName": { 
       "referenceName": "[parameters('destinationLinkedServiceName')]", 
       "type": "LinkedServiceReference" 
      }, 
      "typeProperties": { 
       "tableName": "storeProcedureExecutions" 
      } 
      }} 




    Activity: 
    {"name": "ExecuteHarmonizationProcedure", 
        "description": "Executes the procedure that Harmonizes the Data", 
        "type": "Copy", 
        "inputs": [ 
         { 
         "referenceName": "[parameters('destinationDataSetName')]", 
         "type": "DatasetReference" 
         } 
        ], 
        "outputs": [ 
         { 
         "referenceName": "AzureSQLProcedureDS", 
         "type": "DatasetReference" 
         } 
        ], 
        "typeProperties": { 
         "source": { 
         "type": "SqlSink" 
         }, 
         "sink": { 
         "type": "SqlSink", 
         //"SqlWriterTableType": "storeProcedureExecutionsType", 
         "SqlWriterStoredProcedureName": "@Pipeline().parameters.procedureName", 
         "storedProcedureParameters": { 
          "param1": { 
          "value": "call from adf" 
          } 
         } 
         } 
        } 
} 

어떤 도움 MS는이 주제에 대한 너무 많은 도움을 제공하지 않는 것을 고려 감상 할 수있다.

+0

어려움을 겪는 곳과 발생시키는 오류 메시지를 설명해 주시겠습니까? –

+0

목적은 더미 테이블을 만드는 데 필요한 조치를 취하지 않는 무언가를 찾는 것이 었습니다.이 경우에는 SQL 주입이 더 자주 발생하기 때문입니다. 프로 시저의 이름과 필요한 매개 변수 만 지정하는 방법이 있으면 더 좋을 것입니다. –

답변

2

올바르게 문제를 이해할 수 있을지 모르겠지만 복사 작업에서 저장 프로 시저를 호출하기를 원하십니까?

복사 작업에서 소스 내 sqlReaderQuery 속성을 쉽게 정의 할 수 있습니다.

"typeProperties": { 
     "source": { 
      "type": "SqlSource", 
      "sqlReaderQuery": "EXEC sp_Name; select 1 as test" 
     }, 
. . . 

복사 활동이 항상 쿼리의 결과를 기대하고, 그래서 당신은 저장 프로 시저에 대한 호출을 포함하는 경우는 그게 전부 나던 :이 속성은이 같은 작업을 수행 할 수 있도록하는 T-SQL 명령을 입력 할 수 있습니다 왜 내가 쿼리의 두 번째 부분을 포함할까요?

사용하려는 매개 변수로 바꾸면됩니다.

+0

나는 그것을 시도하고 그것은 작동하지 않습니다. 액티비티는 ~ 4 분 동안 실행 된 후 select 문과 같은 결과를 소스/대상에 매핑하려고하기 때문에 실패합니다. –

+0

예 "select as as test"는 test라는 단일 열을 값으로 1 만 반환합니다. 더미 데이터 집합을 만들거나 요구를 충족시키기 위해 쿼리를 변경합니다. 예제는 복사 작업에서 저장 프로 시저를 호출하는 방법을 보여주기위한 것입니다. –

+1

내가 제안한대로 작동했지만 작동했지만 아래 게시했습니다. 그것은 직접적인 해결책보다 더 많은 해결 방법입니다. DF v2의 현재 상태가 아닌 다른 방법이 없다면 해결책으로 대답을 수락 할 것입니다. –

1

@Martin의 조언에 따라 우리는 실행 작업을 관리했습니다. 다음은 우리가 무슨 짓을했는지 있습니다 :

  1. 는 SQL에 더미 테이블을 만들 :

    CREATE TABLE [dbo].[dummyTable]([col1] [nvarchar](100) NULL)

  2. 는 SQL에서 SP 만들기 : SP에 대한

    CREATE PROCEDURE [dbo].[sp_testHarmonize] @param1 NVARCHAR(200) AS BEGIN INSERT INTO storeProcedureExecutions VALUES (@param1,getdate()); END

  3. 데이터 집합 :

    { "type": "datasets", "name": "[parameters('dummySQLTableDataSet')]", "dependsOn": ["[parameters('dataFactoryName')]", "[parameters('datalakeLinkedServiceName')]"], "apiVersion": "[variables('apiVersion')]", "properties": { "type": "AzureSqlTable", "linkedServiceName": { "referenceName": "[parameters('databaseLinkedServiceName')]", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": "dummyTable" } } }

  4. 파이프 라인 활동

    { "name": "ExecuteHarmonizationProcedure", "dependsOn": [{ "activity": "CopyCSV2SQL", "dependencyConditions": ["Succeeded"] }], "description": "Executes the procedure that Harmonizes the Data", "type": "Copy", "inputs": [{ "referenceName": "[parameters('dummySQLTableDataSet')]", "type": "DatasetReference" }], "outputs": [{ "referenceName": "[parameters('dummySQLTableDataSet')]", "type": "DatasetReference" }], "typeProperties": { "source": { "type": "SqlSource", "sqlReaderQuery": "@Pipeline().parameters.SQLCommand" }, "sink": { "type": "SqlSink" } } }

  5. 실행 SQL 명령에 대한 다음과 같은 매개 변수를 사용하여 파이프 라인 :

    $"EXEC sp_testHarmonize 'call from ADF at {DateTime.Now}'; select top 1 * from dummyTable;"

이이 일을 만들었지 만, 그것은 직접적인 해결책보다 일터로서 더 많이 보입니다. 더미 테이블에 행이 삽입되었다는 것을 알립니다. 더 이상 직접적인 해결책이 없다면 가장 쉬운 방법입니다.

관련 문제