Partager via


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

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 :

  1. 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.
  2. Créez une base de données SQL à l’aide de Éléments - Créer une API d’élément.
  3. Répertoriez toutes les bases de données SQL dans un espace de travail Fabric.
  4. Connectez-vous à la base de données avec SQLCMD pour exécuter un script pour créer un objet.
  5. 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)
}