同步横向扩展副本

本文介绍了如何在命令行或通过脚本使用 PowerShell 同步语义模型横向扩展副本。

当你正在处理主要的读/写语义模型,并且语义模型用户正在使用只读副本时,可以执行语义模型元数据更新和刷新,不会对他们产生影响。 但是,对语义模型所做的更改和刷新会在主要语义模型中发生。 要将更改复制到只读副本,必须将其与读写语义模型同步。

默认情况下,autoSyncReadOnlyReplicas参数设置为true - Power BI 自动同步副本。 可以将autoSyncReadOnlyReplicas设置为false以禁用自动同步。 但是,可以选择使用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. 要验证同步是否已完成,请再次运行步骤 4中的syncStatus命令。 可能需要运行几次该命令,具体取决于同步语义模型副本所需的时间长度。 同步完成后,请检查 syncStartTimesyncEndTime 的值,了解同步所花费的时间。

要了解详细信息,请参阅 Power BI REST API 参考中的数据集 - 触发组中的查询横向扩展同步