使用 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 活動,請完成下列步驟:
在管線活動窗格中搜尋 Data Lake,然後將 U-SQL 活動拖曳至管線畫布。
如果尚未進行選取,請在畫布上選取新的 U-SQL 活動。
選取 [ADLA 帳戶] 索引標籤,以選取或建立用來執行 U-SQL 活動的新的 Azure Data Lake Analytics 連結服務。
選取 [指令碼] 索引標籤,以選取或建立新的儲存體連結服務,以及將主控指令碼儲存位置內的路徑。
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 資料夾中產生輸出檔。 檔案名稱會根據觸發管線時傳入的範圍開始時間而變化。
相關內容
請參閱下列文章,其說明如何以其他方式轉換資料: