使用 Azure 自動化重新整理
透過使用 Azure 自動化和 PowerShell Runbook,您可以在 Azure Analysis 表格式模型上執行自動化資料重新整理作業。
本文中的範例會使用 SqlServer PowerShell 模組。 本文稍後會提供示範重新整理模型的範例 PowerShell Runbook。
驗證
所有呼叫都必須使用有效的 Microsoft Entra ID (OAuth 2) 權杖進行驗證。 本文中的範例會使用服務主體 (SPN) 對 Azure Analysis Services 進行驗證。 若要深入了解,請參閱使用 Azure 入口網站建立服務主體。
必要條件
重要
下列範例假設 Azure Analysis Services 防火牆已停用。 如果已啟用防火牆,則必須將要求啟動器的公用 IP 位址包含在防火牆規則中。
從 PowerShell 資源庫安裝 SqlServer 模組。
在您的Azure 自動化帳戶中,按一下 [模組],然後按一下[瀏覽資源庫]。
在搜尋列中搜尋 SqlServer。
選取 SqlServer,然後按一下 [匯入]。
按一下 [確定]。
建立服務主體 (SPN)
若要了解如何建立服務主體,請參閱使用 Azure 入口網站建立服務主體。
在 Azure Analysis Services 中設定權限
您建立的服務主體必須具有伺服器上的伺服器管理員權限。 若要深入了解,請參閱將服務主體新增至伺服器管理員角色。
設計 Azure 自動化 Runbook
在自動化帳戶中,建立認證資源,以用來安全地儲存服務主體。
輸入認證的詳細資料。 在 [使用者名稱] 中,輸入服務主體應用程式識別碼 (appid) ,然後在 [密碼] 中輸入服務主體密碼。
匯入自動化 Runbook。
瀏覽 Refresh-Model.ps1 檔案、提供 [名稱] 和 [描述],然後按一下 [建立]。
注意
使用本文件底部範例 PowerShell Runbook 區段的指令碼,建立名為 Refresh-Model.ps1 的檔案,並儲存到本機電腦以匯入 Runbook。
Runbook 在建立後,將會自動進入編輯模式。 選取發行。
注意
Runbook 會使用 Get-AutomationPSCredential 命令來擷取先前建立的認證資源。 此命令接著會傳遞至 Invoke-ProcessASADatabase PowerShell 命令,以執行對 Azure Analysis Services 的驗證。
按一下 [啟動] 以測試 Runbook。
填寫 DATABASENAME、ANALYSISSERVER 和 REFRESHTYPE 參數,然後按一下 [確定]。 手動執行 Runbook 時,不需要 WEBHOOKDATA 參數。
如果 Runbook 執行成功,您會獲得如下的輸出:
使用獨立式 Azure 自動化 Runbook
Runbook 可以設定為依排程觸發 Azure Analysis Services 模型重新整理。
設定方法如下:
在自動化 Runbook 中,按一下 [排程],然後按一下 [新增排程]。
按一下 [排程]>[建立新排程],然後填入詳細資料。
按一下 [建立]。
填入排程的參數。 每次 Runbook 觸發時都會使用這些方法。 透過排程執行時,WEBHOOKDATA 參數應保留空白。
按一下 [確定]。
使用 Data Factory 取用
若要使用 Azure Data Factory 取用 Runbook,請先為 Runbook 建立 Webhook。 Webhook 會提供可透過 Azure Data Factory Web 活動呼叫的 URL。
重要
若要建立 Webhook,Runbook 的狀態必須是 [已發佈]。
在您的自動化 Runbook 中,按一下 [Webhook],然後按一下 [新增 Webhook]。
為 Webhook 指定名稱和到期日。 名稱只用於在自動化 Runbook 內識別 Webhook,不會成為 URL 的一部分。
警告
請務必在關閉精靈之前先複製 URL,因為精靈一旦關閉後就無法恢復。
Webhook 的參數可以保持空白。 設定 Azure Data Factory Web 活動時,可以將參數傳遞至 Web 呼叫的主體。
在 Data Factory 中,設定 Web 活動
範例
URL 是從 Webhook 建立的 URL。
本文是 JSON 文件,其中包含下列屬性:
屬性 | 值 |
---|---|
AnalysisServicesDatabase | Azure Analysis Services 資料庫的名稱 範例:AdventureWorksDB |
AnalysisServicesServer | Azure Analysis Services 伺服器名稱。 範例: https://westus.asazure.windows.net/servers/myserver/models/AdventureWorks/ |
DatabaseRefreshType | 要執行的重新整理類型。 範例:完整 |
範例 JSON 主體:
{
"AnalysisServicesDatabaseName": "AdventureWorksDB",
"AnalysisServicesServer": "asazure://westeurope.asazure.windows.net/MyAnalysisServer",
"DatabaseRefreshType": "Full"
}
這些參數定義於 Runbook PowerShell 指令碼中。 執行 Web 活動時,傳遞的 JSON 承載是 WEBHOOKDATA。
此項目會還原序列化並儲存為 PowerShell 參數,然後由 Invoke-ProcessASDatabase PowerShell 命令使用。
使用混合式背景工作角色搭配 Azure Analysis Services
具有靜態公用 IP 位址的 Azure 虛擬機器可用來作為 Azure 自動化混合式背景工作角色。 然後,您可以將此公用 IP 位址新增至 Azure Analysis Services 防火牆。
設定混合式背景工作角色之後,請建立 Webhook,如使用 Data Factory 取用一節所述。 此處的唯一差異在於設定 Webhook 時,請選取 [執行於]>[混合式背景工作角色] 選項。
使用混合式背景工作角色的範例 Webhook:
範例 PowerShell Runbook
下列程式碼片段示範如何使用 PowerShell Runbook 執行 Azure Analysis Services 模型的重新整理。
param
(
[Parameter (Mandatory = $false)]
[object] $WebhookData,
[Parameter (Mandatory = $false)]
[String] $DatabaseName,
[Parameter (Mandatory = $false)]
[String] $AnalysisServer,
[Parameter (Mandatory = $false)]
[String] $RefreshType
)
$_Credential = Get-AutomationPSCredential -Name "ServicePrincipal"
# If runbook was called from Webhook, WebhookData will not be null.
if ($WebhookData)
{
# Retrieve AAS details from Webhook request body
$atmParameters = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)
Write-Output "CredentialName: $($atmParameters.CredentialName)"
Write-Output "AnalysisServicesDatabaseName: $($atmParameters.AnalysisServicesDatabaseName)"
Write-Output "AnalysisServicesServer: $($atmParameters.AnalysisServicesServer)"
Write-Output "DatabaseRefreshType: $($atmParameters.DatabaseRefreshType)"
$_databaseName = $atmParameters.AnalysisServicesDatabaseName
$_analysisServer = $atmParameters.AnalysisServicesServer
$_refreshType = $atmParameters.DatabaseRefreshType
Invoke-ProcessASDatabase -DatabaseName $_databaseName -RefreshType $_refreshType -Server $_analysisServer -ServicePrincipal -Credential $_credential
}
else
{
Invoke-ProcessASDatabase -DatabaseName $DatabaseName -RefreshType $RefreshType -Server $AnalysisServer -ServicePrincipal -Credential $_Credential
}