#sql-server #dacpac #azure-synapse
#sql-сервер #dacpac #azure-synapse
Вопрос:
В настоящее время у меня есть конвейер выпуска Azure DevOps для инкрементного развертывания Azure Synapse DW с использованием файла DACPAC, и он работает нормально. Теперь я хочу, чтобы в файле DACPAC был реализован фильтр, чтобы после сравнения включать только определенные объекты, и только эти объекты будут развернуты в целевой базе данных. Поскольку у нас обычно есть много таблиц / хранимых процедур, созданных в среде разработки, и они не могут быть развернуты в более высоких средах. Я попробовал DacFx API, чтобы исключить все операции Delete
, Add
и Changed
, используя приведенный ниже фрагмент кода, а затем включить только объекты, которые необходимо развернуть. Но на исключение объектов уходит очень много времени. Примечание: Здесь я имею дело примерно с 3 тыс. объектов.
$comparisonResult.Differences | %{
if($_.UpdateAction -eq "Delete") {
$comparisonResult.Exclude($_) | Out-Null
}
}
$comparisonResult.Differences | %{
if($_.UpdateAction -eq "Change") {
$comparisonResult.Exclude($_) | Out-Null
}
}
$comparisonResult.Differences | %{
if($_.UpdateAction -eq "Add") {
$comparisonResult.Exclude($_) | Out-Null
}
}
#start including required objects
$objectList = @('schema1.table1'
,'schema1.table2'
,'schema2.view_sample1'
,'schema2.table4')
Write-Host "Including objects from the provided list... "
$comparisonResult.Differences | %{
if($_.SourceObject.Count -gt 0)
{
$schemaName=$_.SourceObject.Name.parts[0]
$objectName = $_.SourceObject.Name.parts[1]
$finalObjectToInclude = $schemaName "." $objectName
if( $objectList -contains $finalObjectToInclude)
{
Write-Output "Including Object $($finalObjectToInclude)"
$comparisonResult.Include($_) | Out-Null
}
}
}
Нужна ваша экспертная консультация, чтобы заставить это работать, или любое другое предложение также приветствуется.
Заранее благодарю.