スケールアウト レプリカを同期する

この記事では、コマンド ラインまたはスクリプトで PowerShell を使用してセマンティック モデル スケールアウト レプリカを同期する方法について説明します。

プライマリの "読み取り/書き込み" セマンティック モデルを操作しているときに、セマンティック モデル ユーザーが "読み取り専用" レプリカを使っている場合、ユーザーに影響を与えることなくセマンティック モデル メタデータの更新を実行できます。 ただし、セマンティック モデルの変更と更新は、プライマリ セマンティック モデルで行われます。 変更を読み取り専用レプリカにコピーするには、読み取り/書き込みセマンティック モデルと同期する必要があります。

既定では、 autoSyncReadOnlyReplicas パラメーターは true に設定されています。 Power BI はレプリカを自動的に同期します。 autoSyncReadOnlyReplicasfalse に設定すると、自動同期を無効にすることができます。 ただし、syncStatussync 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 でレプリカを同期します。

  1. PowerShell を開き、次のコマンドを実行して Power BI にログインします。

    Login-PowerBI
    
  2. 次のコマンドを実行して、ワークスペース ID を取得します。 <WorkspaceName> は、ワークスペースの名前に置き換えます。

    Get-PowerBIWorkspace -Name "<WorkspaceName>"  # Replace <WorkspaceName> with the name of your workspace
    
  3. 次のコマンドを実行して、セマンティック モデル ID を取得します。 <WorkspaceId> をワークスペースの ID に置き換えます。

    Get-PowerBIDataset -WorkspaceId "<WorkspaceId>"  # Replace <WorkspaceId> with the Id of your workspace
    
  4. 次のコマンドを実行して、セマンティック モデルの同期状態を確認します。 <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
    

    出力では、minActiveReadVersionminActiveReadTimestamp の値は "読み取り専用" のレプリカを参照しています。 commitVersioncommitTimestamp の値は、読み取り/書き込みのセマンティック モデルを参照しています。 これらの違いは、"読み取り専用" のレプリカが以前のバージョンのセマンティック モデルであることを示しています。

  5. 次のコマンドを使用して、読み取り/書き込みセマンティック モデルと読み取り専用レプリカを同期します。 <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
    

    出力の同期状態情報は、"読み取り/書き込み" のセマンティック モデルと "読み取り専用" のレプリカが同期されていないことを示します。同期をトリガーしたばかりなので、これは想定されたものです。

  6. 同期が完了したことを確認するには、手順 4syncStatus コマンドを再度実行します。 セマンティック モデル コピーの同期に必要な時間の長さによっては、このコマンドを数回実行する必要があります。 同期が完了したら、syncStartTimesyncEndTime の値を調べて、同期にかかった時間を確認します。

詳細については、Power BI REST API リファレンスの「データセット - グループ内のクエリ スケールアウト同期をトリガーする」を参照してください。