Créer une base de données SQL dans Microsoft Fabric via une API REST
S’applique à :✅Base de données SQL dans Microsoft Fabric
La plateforme Fabric dispose d’un ensemble complet d’API REST qui peuvent être utilisées pour déployer et gérer des ressources. Ces API peuvent être utilisées pour déployer des bases de données SQL Fabric. Cet article et cet exemple de script illustrent un script PowerShell simple qui peut être utilisé pour déployer une base de données SQL Fabric et y ajouter des données.
Prérequis
- Vous avez besoin d’une capacité de Fabric existante. Si ce n’est pas le cas, démarrez une version d’évaluation de Fabric.
- Veillez à activer la base de données SQL dans Fabric en utilisant les paramètres de locataire du portail d’administration.
- Créer un espace de travail ou utiliser un espace de travail Fabric existant.
- Vous devez être membre des rôles Administrateur ou Membre de l’espace de travail pour créer une base de données SQL.
- Installer la version golang de SQLCMD. Exécutez
winget install sqlcmd
sur Windows pour l’installer. Pour les autres systèmes d’exploitation, consultez aka.ms/go-sqlcmd. - Module Az PowerShell. Exécutez
Install-Module az
dans PowerShell pour l’installer.
Créer une base de données SQL via l’API REST
Cet exemple de script utilise Connect-AzAccount
, un alias d’az login
pour demander des informations d’identification. Il utilise ces informations d’identification pour obtenir un jeton d’accès à utiliser pour les appels d’API REST. SQLCMD utilise le contexte du compte qui a été donné à Connect-AzAccount
.
Le script crée une base de données nommée avec l’alias de l’utilisateur connecté et la date. Actuellement, l’API REST ne retourne pas d’état, donc nous devons effectuer une boucle et vérifier que la base de données est créée. Une fois la base de données créée, SQLCMD est utilisé pour créer des objets, puis interroger leur existence. Pour finir, nous supprimons la base de données.
Dans le script suivant, remplacez <your workspace id>
par votre ID d’espace de travail Fabric. Vous pouvez trouver l’ID d’un espace de travail facilement dans l’URL. En effet, il s’agit de la chaîne unique comprise entre deux caractères /
après /groups/
dans votre fenêtre de navigateur. Par exemple, 11aa111-a11a-1111-1abc-aa1111aaaa
dans https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/
.
Ce script illustre les points suivants :
- Récupérez un jeton d’accès à l’aide de Get-AzAccessToken et convertissez-le depuis une chaîne sécurisée. Si vous utilisez PowerShell 7, ConvertFrom-SecureString est également une option.
- Créez une base de données SQL à l’aide de Éléments - Créer une API d’élément.
- Répertoriez toutes les bases de données SQL dans un espace de travail Fabric.
- Connectez-vous à la base de données avec SQLCMD pour exécuter un script pour créer un objet.
- Supprimez la base de données en utilisant l'API Items - Delete Item.
Import-Module Az.Accounts
Connect-AzAccount
$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. Connnect 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
)'
#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)
}