使用 Azure Data Factory 和 Synapse Analytics 在 Azure Data Lake Analytics 上執行 U-SQL 指令碼來處理資料

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory (部分機器翻譯),這是適用於企業的全方位分析解決方案。 Microsoft Fabric (部分機器翻譯) 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用 (部分機器翻譯)!

Azure Data Factory 中的「管線」或 Synapse Analytics 工作區會使用已連結的計算服務,來處理已連結儲存體服務中的資料。 它包含一系列活動,其中每個活動都會執行特定的處理作業。 本文將說明 Data Lake Analytics U-SQL 活動,它在 Azure Data Lake Analytics 計算連結的服務上執行 U-SQL 指令碼。

使用 Data Lake Analytics「U-SQL 活動」來建立管線之前,請先建立 Azure Data Lake Analytics 帳戶。 若要了解 Azure Data Lake Analytics,請參閱 開始使用 Azure Data Lake Analytics

使用 UI 來將 Azure Data Lake Analytics U-SQL 活動新增至管線

如果要在管線中使用 Azure Data Lake Analytics U-SQL 活動,請完成下列步驟:

  1. 在管線活動窗格中搜尋 Data Lake,然後將 U-SQL 活動拖曳至管線畫布。

  2. 如果尚未進行選取,請在畫布上選取新的 U-SQL 活動。

  3. 選取 [ADLA 帳戶] 索引標籤,以選取或建立用來執行 U-SQL 活動的新的 Azure Data Lake Analytics 連結服務。

    Shows the UI for a U-SQL activity.

  4. 選取 [指令碼] 索引標籤,以選取或建立新的儲存體連結服務,以及將主控指令碼儲存位置內的路徑。

    Shows the UI for the Script tab for a U-SQL activity.

Azure Data Lake Analytics 已連結的服務

您建立 Azure Data Lake Analytics 連結服務,來將 Azure Data Lake Analytics 計算服務連結至 Azure Data Factory 或 Synapse Analytics 工作區。 管線中的 Data Lake Analytics U-SQL 活動會參考此連結服務。

下表提供 JSON 定義中所使用之一般屬性的描述。

屬性 描述 必要
type type 屬性應設為: AzureDataLakeAnalytics Yes
accountName Azure Data Lake Analytics 帳戶名稱。 Yes
dataLakeAnalyticsUri Azure Data Lake Analytics URI。 No
subscriptionId Azure 訂用帳戶識別碼 No
resourceGroupName Azure 資源群組名稱 No

服務主體驗證

Azure Data Lake Analytics 已連結的服務需要服務主體驗證,才能連接到 Azure Data Lake Analytics 服務。 若要使用服務主體驗證,請在 Microsoft Entra ID 中註冊應用程式實體,並授與其使用之 Data Lake Analytics 和 Data Lake Store 存取權。 如需詳細的步驟,請參閱服務對服務驗證。 請記下以下的值,您可以使用這些值來定義連結服務:

  • Application ID
  • 應用程式金鑰
  • 租用戶識別碼

使用 [新增使用者精靈] 至您的 Azure Data Lake Analytics 授與服務主體權限。

指定下列屬性以使用服務主體驗證:

屬性 描述 必要
servicePrincipalId 指定應用程式的用戶端識別碼。 Yes
servicePrincipalKey 指定應用程式的金鑰。 Yes
tenant 指定您的應用程式所在租用戶的資訊 (網域名稱或租用戶識別碼)。 將滑鼠游標暫留在 Azure 入口網站右上角,即可擷取它。 Yes

範例:服務主體驗證

{
    "name": "AzureDataLakeAnalyticsLinkedService",
    "properties": {
        "type": "AzureDataLakeAnalytics",
        "typeProperties": {
            "accountName": "<account name>",
            "dataLakeAnalyticsUri": "<azure data lake analytics URI>",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "value": "<service principal key>",
                "type": "SecureString"
            },
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
            "subscriptionId": "<optional, subscription id of ADLA>",
            "resourceGroupName": "<optional, resource group name of ADLA>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }       
    }
}

若要深入了解已連結的服務,請參閱計算已連結的服務

Data Lake Analytics U-SQL 活動

下列 JSON 片段會定義具有 Data Lake Analytics U-SQL 活動的管線。 活動定義具有您稍早建立的 Azure Data Lake Analytics 連結服務的參考。 為執行 Data Lake Analytics U-SQL 指令碼,該服務會將您指定的指令碼提交給 Data Lake Analytics,必要的輸入和輸出會在 Data Lake Analytics 指令碼中定義,藉以擷取及輸出。

{
    "name": "ADLA U-SQL Activity",
    "description": "description",
    "type": "DataLakeAnalyticsU-SQL",
    "linkedServiceName": {
        "referenceName": "<linked service name of Azure Data Lake Analytics>",
        "type": "LinkedServiceReference"
    },
    "typeProperties": {
        "scriptLinkedService": {
            "referenceName": "<linked service name of Azure Data Lake Store or Azure Storage which contains the U-SQL script>",
            "type": "LinkedServiceReference"
        },
        "scriptPath": "scripts\\kona\\SearchLogProcessing.txt",
        "degreeOfParallelism": 3,
        "priority": 100,
        "parameters": {
            "in": "/datalake/input/SearchLog.tsv",
            "out": "/datalake/output/Result.tsv"
        }
    }   
}

下表描述此活動特有的屬性之名稱和描述。

屬性 描述 必要
NAME 管線中的活動名稱 Yes
description 說明活動用途的文字。 No
type 對於 Data Lake Analytics U-SQL 活動,活動類型為 DataLakeAnalyticsU-SQL Yes
linkedServiceName Azure Data Lake Analytics 之已連結的服務。 若要深入了解此已連結的服務,請參閱計算已連結的服務一文。 Yes
scriptPath 包含 U-SQL 指令碼的資料夾的路徑。 檔案的名稱有區分大小寫。 Yes
scriptLinkedService 連結服務會包含指令碼的 Azure Data Lake Store 連結或 Azure 儲存體 連結 Yes
degreeOfParallelism 同時用來執行作業的節點數目上限。 No
priority 判斷應該選取排入佇列的哪些工作首先執行。 編號愈低,優先順序愈高。 No
parameters 要傳遞到 U-SQL 指令碼的參數。 No
runtimeVersion 所要使用之 U-SQL 引擎的執行階段版本。 No
compilationMode

U-SQL 的編譯模式。 必須是下列其中一個值:Semantic:僅執行語意檢查和必要的例行性檢查、Full:執行完整編譯,包括語法檢查、最佳化、程式碼產生等等,SingleBox:執行完整編譯,TargetType 設定為 SingleBox。 如果您沒有為此屬性指定值,伺服器將會判斷最佳的編譯模式。

No

請參閱 SearchLogProcessing.txt 以了解指令碼定義。

範例 U-SQL 指令碼

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int,
            Urls            string,
            ClickedUrls     string
    FROM @in
    USING Extractors.Tsv(nullEscape:"#NULL#");

@rs1 =
    SELECT Start, Region, Duration
    FROM @searchlog
WHERE Region == "en-gb";

@rs1 =
    SELECT Start, Region, Duration
    FROM @rs1
    WHERE Start <= DateTime.Parse("2012/02/19");

OUTPUT @rs1   
    TO @out
      USING Outputters.Tsv(quoting:false, dateTimeFormat:null);

在上述指令碼範例中,該指令碼的輸入和輸出是在 @in@out 參數中定義。 透過使用參數區段的服務來動態傳遞 U-SQL 指令碼中 @in@out 參數的值。

您也可以在管線定義中,針對在 Azure Data Lake Analytics 服務上執行的作業,指定其他屬性 (例如 degreeOfParallelism 和 priority)。

動態參數

在範例管線定義中,in 和 out 參數都被指派了硬式編碼值。

"parameters": {
    "in": "/datalake/input/SearchLog.tsv",
    "out": "/datalake/output/Result.tsv"
}

您可改為使用動態參數。 例如:

"parameters": {
    "in": "/datalake/input/@{formatDateTime(pipeline().parameters.WindowStart,'yyyy/MM/dd')}/data.tsv",
    "out": "/datalake/output/@{formatDateTime(pipeline().parameters.WindowStart,'yyyy/MM/dd')}/result.tsv"
}

在此例中,系統仍然會從 /datalake/input 資料夾挑選輸入檔,並在 /datalake/output 資料夾中產生輸出檔。 檔案名稱會根據觸發管線時傳入的範圍開始時間而變化。

請參閱下列文章,其說明如何以其他方式轉換資料: