Синхронизация масштабируемых реплика

В этой статье описывается синхронизация масштабируемых реплика семантической модели с помощью PowerShell в командной строке или скрипте.

При работе с основной семантической моделью чтения и записи пользователи семантической модели используют только для чтения реплика, можно выполнять обновления метаданных и обновления семантической модели, не затрагивая их. Однако изменения в семантической модели и обновления происходят в основной семантической модели. Чтобы скопировать изменения в реплика только для чтения, его необходимо синхронизировать с семантической моделью чтения и записи.

По умолчанию autoSyncReadOnlyReplicas для параметра задано значение true — Power BI автоматически синхронизирует реплика. Вы можете отключить автоматическую синхронизацию, задав для autoSyncReadOnlyReplicasfalseпараметра . Однако вы можете синхронизировать их вручную с помощью syncStatus интерфейсов sync REST API.

Чтобы проверка состояние синхронизации реплика, используйте SyncStatus REST API. В этой статье описываются команды PowerShell для использования этого API.

Проверка состояния синхронизации реплика

###
# 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 имеет значение "Недоступно", попробуйте загрузить реплика семантической модели или выполнить обновление модели, чтобы получить последнее состояние синхронизации.

Дополнительные сведения см. в статье "Наборы данных— получение состояния синхронизации масштабирования запросов в группе " в справочнике по REST API Power BI.

Отключение автоматической синхронизации реплика

###
# 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/dataset/$datasetId/queryScaleOut/syncStatus" -Method Get | ConvertFrom-Json 
}

Write-Host 'Completed'
$response

Дополнительные сведения см. в статье "Наборы данных— активация синхронизации масштабирования запросов в группе " в справочнике по REST API Power BI.

Выполнение синхронизации вручную реплика (командная строка)

Выполните следующие действия, чтобы синхронизировать реплика с помощью Windows PowerShell:

  1. Откройте PowerShell и войдите в Power BI, выполнив следующую команду:

    Login-PowerBI
    
  2. Получите идентификаторы рабочей области, выполнив приведенную ниже команду. Замените <WorkspaceName> именем своей рабочей области.

    Get-PowerBIWorkspace -Name "<WorkspaceName>"  # Replace <WorkspaceName> with the name of your workspace
    
  3. Получите идентификатор семантической модели, выполнив приведенную ниже команду. Замените <WorkspaceId> идентификатором рабочей области.

    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
    

    В выходных данных minActiveReadVersion и minActiveReadTimestamp значениях относятся к реплика только для чтения. commitTimestamp И commitVersion значения относятся к семантической модели чтения и записи. Разница между ними указывает, что реплика только для чтения представляет старую версию семантической модели.

  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. Чтобы убедиться, что синхронизация завершена, выполните syncStatus команду на шаге 4 еще раз. Может потребоваться выполнить команду несколько раз в зависимости от времени, необходимого для синхронизации копий семантической модели. По завершении синхронизации проверка значения syncStartTime и syncEndTime узнать, сколько времени занимает синхронизация.

Дополнительные сведения см. в статье "Наборы данных— активация синхронизации масштабирования запросов в группе " в справочнике по REST API Power BI.