スケールアウト レプリカを同期する
この記事では、コマンド ラインまたはスクリプトで PowerShell を使用してセマンティック モデル スケールアウト レプリカを同期する方法について説明します。
プライマリの "読み取り/書き込み" セマンティック モデルを操作しているときに、セマンティック モデル ユーザーが "読み取り専用" レプリカを使っている場合、ユーザーに影響を与えることなくセマンティック モデル メタデータの更新を実行できます。 ただし、セマンティック モデルの変更と更新は、プライマリ セマンティック モデルで行われます。 変更を読み取り専用レプリカにコピーするには、読み取り/書き込みセマンティック モデルと同期する必要があります。
既定では、 autoSyncReadOnlyReplicas
パラメーターは true
に設定されています。 Power BI はレプリカを自動的に同期します。 autoSyncReadOnlyReplicas
を false
に設定すると、自動同期を無効にすることができます。 ただし、syncStatus
と sync
REST API を使用して手動で同期することもできます。
レプリカの同期状態を確認するには、SyncStatus
REST API を使います。 この記事では、この API を使うための PowerShell コマンドについて説明します。
レプリカの同期状態を確認する
###
# Check the scale-out replica sync status
###
Login-PowerBI | Out-Null
$workspaceId = '<enter workspaceId>'
$datasetId = Get-PowerBIDataset -WorkspaceId $workspaceId `
| Where{$_.Name -match "<enter semantic model name>"} `
| Select-Object -ExpandProperty Id -First 1 `
| ForEach-Object {$_.Guid}
$response = Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId/queryScaleOut/syncStatus" -Method Get | ConvertFrom-Json
$response | Format-List
if ($response.commitVersion -eq $response.minActiveReadVersion)
{
Write-Host "Semantic model read-write and read-only replicas are in sync."
}
else
{
Write-Host "Semantic model read-write and read-only replicas are not in sync." -ForegroundColor Red
}
同期状態 API から空の応答が返された場合、または scaleOutStatus が "Unavailable"に設定されている場合は、セマンティック モデルの読み取り/書き込みレプリカを読み込むか、モデルに対して更新を実行して最新の同期状態を取得します。
詳細については、Power BI REST API リファレンスの「データセット - グループ内のクエリ スケールアウト同期状態を取得する」を参照してください。
レプリカの自動同期を無効にする
###
# Disable automatic scale-out replica sync
###
Login-PowerBI | Out-Null
$workspaceId = '<enter workspaceId>'
$datasetId = Get-PowerBIDataset -WorkspaceId $workspaceId `
| Where{$_.Name -match "<enter semantic model name>"} `
| Select-Object -ExpandProperty Id -First 1 `
| ForEach-Object {$_.Guid}
Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId" `
-Method Patch -Body '{ "queryScaleOutSettings": { "autoSyncReadOnlyReplicas": false }}'
Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId" -Method Get `
| ConvertFrom-Json | Select-Object -ExpandProperty queryScaleOutSettings `
| ForEach {
if($_.autoSyncReadOnlyReplicas -eq $false)
{
Write-Host "Success! Automatic replica synchronization has been disabled."
} else
{
Write-Host "Something went wrong! Automatic replica synchronization is still enabled." -ForegroundColor Red
}
}
レプリカ手動同期を実行する (スクリプト)
###
# Perform a manual replica sync
###
Login-PowerBI | Out-Null
$workspaceId = '<enter workspaceId>'
$datasetId = Get-PowerBIDataset -WorkspaceId $workspaceId `
| Where{$_.Name -match "<enter semantic model name>"} `
| Select-Object -ExpandProperty Id -First 1 `
| ForEach-Object {$_.Guid}
$response = Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId/queryScaleOut/sync" -Method Post -Body "" | ConvertFrom-Json
Write-Host 'Synchronizing the scale-out replicas...' -NoNewLine
while ($response.commitVersion -ne $response.minActiveReadVersion)
{
Write-Host '.' -NoNewLine
Start-Sleep -Seconds 10
$response = Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId/queryScaleOut/syncStatus" -Method Get | ConvertFrom-Json
}
Write-Host 'Completed'
$response
詳細については、Power BI REST API リファレンスの「データセット - グループ内のクエリ スケールアウト同期をトリガーする」を参照してください。
レプリカ手動同期を実行する (コマンド ライン)
次の手順に従って、Windows PowerShell でレプリカを同期します。
PowerShell を開き、次のコマンドを実行して Power BI にログインします。
Login-PowerBI
次のコマンドを実行して、ワークスペース ID を取得します。
<WorkspaceName>
は、ワークスペースの名前に置き換えます。Get-PowerBIWorkspace -Name "<WorkspaceName>" # Replace <WorkspaceName> with the name of your workspace
次のコマンドを実行して、セマンティック モデル ID を取得します。
<WorkspaceId>
をワークスペースの ID に置き換えます。Get-PowerBIDataset -WorkspaceId "<WorkspaceId>" # Replace <WorkspaceId> with the Id of your workspace
次のコマンドを実行して、セマンティック モデルの同期状態を確認します。
<WorkspaceId>
と<DatasetId>
の値を適宜置き換えます。Invoke-PowerBIRestMethod -Url 'groups/<WorkspaceId>/datasets/<DatasetId>/queryScaleOut/syncStatus' -Method Get | ConvertFrom-Json | Format-List # Replace <WorkspaceId> with the Id of your workspace and <DatasetId> with the Id of your semantic model
出力では、
minActiveReadVersion
とminActiveReadTimestamp
の値は "読み取り専用" のレプリカを参照しています。commitVersion
とcommitTimestamp
の値は、読み取り/書き込みのセマンティック モデルを参照しています。 これらの違いは、"読み取り専用" のレプリカが以前のバージョンのセマンティック モデルであることを示しています。次のコマンドを使用して、読み取り/書き込みセマンティック モデルと読み取り専用レプリカを同期します。
<WorkspaceId>
と<DatasetId>
の値を適宜置き換えます。Invoke-PowerBIRestMethod -Url 'groups/<WorkspaceId>/datasets/<DatasetId>/queryScaleOut/sync' -Method Post -Body "" | ConvertFrom-Json | Format-List # Replace <WorkspaceId> with the Id of your workspace and <DatasetId> with the Id of your semantic model
出力の同期状態情報は、"読み取り/書き込み" のセマンティック モデルと "読み取り専用" のレプリカが同期されていないことを示します。同期をトリガーしたばかりなので、これは想定されたものです。
同期が完了したことを確認するには、手順 4 の
syncStatus
コマンドを再度実行します。 セマンティック モデル コピーの同期に必要な時間の長さによっては、このコマンドを数回実行する必要があります。 同期が完了したら、syncStartTime
とsyncEndTime
の値を調べて、同期にかかった時間を確認します。
詳細については、Power BI REST API リファレンスの「データセット - グループ内のクエリ スケールアウト同期をトリガーする」を参照してください。