2017-12-27 32 views
0

ADFv2에서 U-SQL 스크립트를 실행하려고하지만 실행을 방해하는 오류가 있습니다. 이 문제에 관한 MS 문서가 도움이되지 않는다는 것을 고려할 때, 나는이 문제를 수정하는 데 도움을 청합니다.ADF에서 U-SQL 스크립트를 실행할 수 없습니다. ScriptPath는 null이 아니어야합니다.

  1. 초기 문제는 U-SQL 스크립트를 ADLA에 배포하는 방법입니다. 도움이되는 것을 찾지 못했고 ADLA와 Azure Blob Storage에 .usql과 .txt 형식의 스크립트를 복사하여 붙여 넣기 만했습니다. (이것은 또한 문제 중 하나 일 수 있습니다).

  2. MS documentation에 따라 ARM을 만들었지 만 오류가 발생하여 오류가 발생했습니다 : ScriptPath should not be null이 값은 링크 된 서비스 및 작업에서도 이미 지정되었으므로 이상합니다.

아래는 우리가 만든 LS 및 활동은 다음과 같습니다

LinkedService :

{ 
    "type": "linkedservices", 
    "name": "LinkedServiceofAzureBlobStorageforscriptPath", 
    "dependsOn": ["[parameters('dataFactoryName')]"], 
    "apiVersion": "[variables('apiVersion')]", 
    "properties": { 
     "type": "AzureStorage", 
     "typeProperties": { 
      "connectionString": { 
       "type": "SecureString", 
       "value": "DefaultEndpointsProtocol=https;AccountName=<account>;AccountKey=<key>;EndpointSuffix=core.windows.net" 
      } 
      "scriptPath": "container\\script.txt" 
      //"scriptPath": "https://storage.blob.core.windows.net/container/script.txt"//"wasb://[email protected]/script.txt", 
     } 
    } 
} 

활동 :

{ 
      "type": "DataLakeAnalyticsU-SQL", 
      "typeProperties": { 
       //"script": "master.dbo.sp_test()", 
       "scriptPath": "container\\script.txt"//"scriptPath": "https://storage.blob.core.windows.net/container/script.txt"//"wasb://[email protected]/script.txt", 
       "scriptLinkedService": { 
        "referenceName": "LinkedServiceofAzureBlobStorageforscriptPath", 
        "type": "LinkedServiceReference" 
       }, 
       "degreeOfParallelism": 3, 
       "priority": 100 
      }, 
      "name": "CopyFromAzureBlobToAzureSQL", 
      "description": "Copy data frm Azure blob to Azure SQL", 
      "linkedServiceName": { 
       "referenceName": "AzureDataLakeAnalyticsLinkedService", 
       "type": "LinkedServiceReference" 
      } 
     } 

또한 this approach하지만 여전히 성공을했습니다.

@a = 
    SELECT * 
    FROM(
     VALUES 
     (
      "Contoso", 
      1500.0 
     ), 
     (
      "Woodgrove", 
      2700.0 
     ), 
     (
      "Contoso", 
      1500.0 
     ), 
     (
      "Woodgrove", 
      2700.0 
     ), 
     (
      "Contoso", 
      1500.0 
     ), 
     (
      "Woodgrove", 
      2700.0 
     ), 
     (
      "Contoso", 
      1500.0 
     ), 
     (
      "Woodgrove", 
      2700.0 
     ), 
     (
      "Contoso", 
      1500.0 
     ), 
     (
      "Woodgrove", 
      2700.0 
     ), 
     (
      "Contoso", 
      1500.0 
     ), 
     (
      "Woodgrove", 
      2700.0 
     ) 
     ) AS 
       D(customer, amount); 
OUTPUT @a 
TO "/data"+DateTime.Now.ToString("yyyyMMddHHmmss")+".csv" 
USING Outputters.Csv(); 

하지만 당신은 스크립트의 뒤에 몇 가지 코드를 좀 더 복잡한 예제를 가리 수 있다면 그것은 좋은 것 :

이것은 우리가 테스트 더미 스크립트입니다.

감사합니다. 있는 .DLL을 업로드하는

  • 우리가 스크립트를 실행합니다

    는 업데이트 2018년 1월 26일는

    MS는 usql의 배포에 관한과 협의 후, 우리는 파워 쉘 명령어의 조합과 함께 Datalake의 폴더에있는 u-SQL 어셈블리의 bin에 위치합니다.

  • 그런 다음 디렉토리를 반복하여 각각의 어셈블리를 개별적으로 만듭니다.
  • 우리는 Datalake Analytics의 저장 프로 시저로 u-sql 스크립트를 만들고 필요한 매개 변수로 해당 프로 시저를 실행하는 간단한 u-sql 스크립트를 업로드합니다.

답변

1

링크 된 서비스에서 스크립트 경로가 필요하지 않습니다.

블롭 연결 서비스는해야한다 :

{ 
    "name": "Blob Name", 
    "properties": { 
     "type": "AzureStorage", 
     "typeProperties": { 
      "connectionString": { 
       "type": "SecureString", 
       "value": "DefaultEndpointsProtocol=https;AccountName=etc" 
      } 
     }, 
     "connectVia": { 
      "referenceName": "Your IR Ref", 
      "type": "IntegrationRuntimeReference" 
     } 
    } 
} 

그런 다음 활동에 링크 된 서비스에 대한 참조 이름으로 아래와 같이 컨테이너와 파일 이름을 사용하여 스크립트를 참조합니다.

"activities": [ 
     { 
      "name": "U-SQL1", 
      "type": "DataLakeAnalyticsU-SQL", 
      "policy": { 
       "timeout": "7.00:00:00", 
       "retry": 0, 
       "retryIntervalInSeconds": 20 
      }, 
      "typeProperties": { 
       "scriptPath": "u-sql1/Test", 
       "degreeOfParallelism": { 
        "value": "5", 
        "type": "Expression" 
       }, 
       "priority": 1, 
       "compilationMode": "Full", 
       "scriptLinkedService": { 
        "referenceName": "Your Blob Ref", 
        "type": "LinkedServiceReference" 
       } 
      }, 
      "linkedServiceName": { 
       "referenceName": "Your ADLa Ref", 
       "type": "LinkedServiceReference" 
      } 
     }, 

정보를 위해 비공개 미리보기 액세스 권한이 있으므로 MS 설명서를 무시하고 새로운 dev UI를 사용하여이 JSON을 만들었습니다.위 테스트 여기의 Blob 게시물에 그것을 사용으로 작동되었습니다

https://mrpaulandrew.com/2017/12/20/controlling-u-sql-job-aus-with-azure-data-factory-v2-pipeline-parameters/

희망이 도움이됩니다.

+0

"container \\ script.txt"-> "container/script.usql"에서 스크립트 경로를 변경 했으므로 이제 작동 중입니다. 또한 Blob LS의 정의에 문제가있었습니다 (더 명확한 답변으로 게시 할 예정). 종속 경로 (.dll)로 u-sql 스크립트를 배포하는 방법과 scriptPath가 필요하므로 u-sql 프로 시저를 실행하는 방법에 대한 자습서를 가르쳐 주시겠습니까? 내가 찾은 모든 샘플에는 그 샘플이 없습니다. –