Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:✅базе данных SQL в Microsoft Fabric
REST API Fabric можно использовать для развертывания и управления ресурсами, включая базы данных SQL в рамках Fabric.
В этой статье и примере скрипта показано, как использовать PowerShell для вызова REST API Fabric для развертывания базы данных SQL Fabric.
Предварительные требования
- Вам нужна действующая мощность Fabric. Если вы этого не сделали, запустите пробную версию Fabric.
- Вы можете использовать существующую рабочую область или создать новую рабочую область Fabric.
- Для создания базы данных SQL необходимо быть членом ролей администратора или члена рабочей области .
- Установите версию golang SQLCMD. Запустите
winget install sqlcmdв Windows, чтобы установить. Сведения о других операционных системах см. в aka.ms/go-sqlcmd. - PowerShell 5.1 или PowerShell 7.4 и более поздних версий
- Модуль Az PowerShell. Запустите
Install-Module azв PowerShell, чтобы установить.
Создание базы данных SQL с помощью REST API
В этом примере скрипта используется Connect-AzAccountпсевдоним az login для запроса учетных данных. Он использует эти учетные данные для получения маркера доступа для вызовов REST API. SQLCMD использует контекст учетной записи, переданной в Connect-AzAccount.
Скрипт создает базу данных с именем, состоящим из псевдонима пользователя, вошедшего в систему, и даты. В настоящее время REST API не возвращает состояние, поэтому необходимо выполнить цикл и проверить, нужно ли создать базу данных. После создания базы данных SQLCMD используется для создания некоторых объектов, а затем запроса на их существование. Наконец, мы удаляем базу данных.
В следующем скрипте замените <your workspace id> на идентификатор рабочей области Fabric. Идентификатор рабочей области можно легко найти в URL-адресе, это уникальная строка внутри двух / символов после /groups/ в окне браузера. Например, 11aa111-a11a-1111-1abc-aa1111aaaa в https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.
Этот скрипт демонстрирует следующее:
- Получите маркер доступа с помощью Get-AzAccessToken и преобразуйте его из безопасной строки. При использовании PowerShell 7 ConvertFrom-SecureString также является вариантом.
- Создайте базу данных SQL с помощью элементов — создание API элементов.
- Список всех баз данных SQL в рабочей области Fabric.
- Подключитесь к базе данных с SQLCMD для запуска скрипта для создания объекта.
- Удалите базу данных с помощью элементов —API удаления элементов.
Import-Module Az.Accounts
az login
$workspaceid = '<your workspace id>'
$databaseid = $null
$headers = $null
$responseHeaders = $null
# 1. Get the access token and add it to the headers
$access_token = (Get-AzAccessToken -AsSecureString -ResourceUrl https://api.fabric.microsoft.com)
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($access_token.Token)
try {
$headers = @{
Authorization = $access_token.Type + ' ' + ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr))
}
$access_token.UserId -match('^[^@]+') | Out-Null
# 2. Create the database and wait for it to be created.
$body = @{
displayName = $matches[0] + (Get-Date -Format "MMddyyyy")
type = "SQLDatabase"
description = "Created using public api"
}
$parameters = @{
Method="Post"
Headers=$headers
ContentType="application/json"
Body=($body | ConvertTo-Json)
Uri = 'https://api.fabric.microsoft.com/v1/workspaces/' + $workspaceid + '/items'
}
Invoke-RestMethod @parameters -ErrorAction Stop
$databases = (Invoke-RestMethod -Headers $headers -Uri https://api.fabric.microsoft.com/v1/workspaces/$($workspaceid)/SqlDatabases).value
$databaseid = $databases.Where({$_.displayName -eq $body.displayName}).id
While($databaseid -eq $null)
{
Write-Host 'Waiting on database create.'
Start-Sleep 30
$databases = (Invoke-RestMethod -Headers $headers -Uri https://api.fabric.microsoft.com/v1/workspaces/$($workspaceid)/SqlDatabases).value
$databaseid = $databases.Where({$_.displayName -eq $body.displayName}).id
}
# 3. List all SQL databases in a Fabric workspace
Write-Host 'Listing databases in workspace.'
Invoke-RestMethod -Headers $headers -Uri https://api.fabric.microsoft.com/v1/workspaces/$($workspaceid)/items?type=SQlDatabase | select -ExpandProperty Value | ft
$databaseProperties = (Invoke-RestMethod -Headers $headers -Uri https://api.fabric.microsoft.com/v1/workspaces/$($workspaceid)/SqlDatabases/$($databaseid) | select -ExpandProperty Properties)
#4. Connect to the database and create a table
Write-Host 'Attempting to connect to the database.'
sqlcmd.exe -S $databaseProperties.ServerFqdn -d $databaseProperties.DatabaseName -G -Q 'create table test2
(
id int
);
insert into test2 values (1);
insert into test2 values (2);
insert into test2 values (3);
select * from test2;'
#5. Delete the database
$parameters = @{
Method="Delete"
Headers=$headers
ContentType="application/json"
Body=($body | ConvertTo-Json)
Uri = 'https://api.fabric.microsoft.com/v1/workspaces/' + $workspaceid + '/items/' + $databaseid
}
Invoke-RestMethod @parameters
Write-Output 'Cleaned up:' $body.displayName
} finally {
# The following lines ensure that sensitive data is not left in memory.
$headers = [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
$parameters = [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Сопоставление базы данных
По умолчанию база данных создается с регистронезависимой колляцией SQL_Latin1_General_CP1_CI_AS.
Параметры сортировки базы данных нельзя изменить после создания, хотя параметры сортировки для отдельных столбцов поддерживаются.
При создании базы данных SQL с помощью REST API можно указать параметры сортировки в PowerShell. Добавьте свойство с именем creationPayload в $body хэш-файл. Свойство collation содержит имя сортировки, например:
$collation = 'Latin1_General_100_BIN2_UTF8' # Desired collation name
$body = @{
displayName = $matches[0] + (Get-Date -Format "MMddyyyy")
type = "SQLDatabase"
description = "Created using public api"
creationPayload = @{
collation = $collation
creationMode = "new"
}
}