Condividi tramite


Creare un database SQL con l'API REST per Microsoft Fabric

Si applica a:Database SQL in Microsoft Fabric

È possibile usare l'API REST di Fabric per distribuire e gestire le risorse, inclusi i database SQL in Fabric.

Questo articolo e uno script di esempio illustrano come usare PowerShell per chiamare l'API REST di Fabric per distribuire un database SQL di Fabric.

Prerequisiti

Creare un nuovo database SQL tramite l'API REST

Questo script di esempio usa Connect-AzAccount, un alias di az login per richiedere le credenziali. Usa queste credenziali per ottenere un token di accesso da usare per le chiamate API REST. SQLCMD usa il contesto dell'account assegnato a Connect-AzAccount.

Lo script crea un database denominato con l'alias dell'utente connesso e la data. Attualmente, l'API REST non restituisce uno stato, quindi è necessario eseguire un ciclo e verificare la presenza del database da creare. Dopo aver creato il database, SQLCMD viene usato per creare alcuni oggetti e quindi eseguire una query sulla loro esistenza. Infine, si elimina il database.

Nel seguente script, sostituire <your workspace id> con l'ID dell'area di lavoro Fabric. È possibile trovare facilmente l'ID di un'area di lavoro nell'URL, ovvero la stringa univoca all'interno di due / caratteri dopo /groups/ nella finestra del browser. Ad esempio, 11aa111-a11a-1111-1abc-aa1111aaaa in https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.

Questo script illustra:

  1. Recupera un token di accesso usando Get-AzAccessToken e converti il token da una stringa protetta. Se si usa PowerShell 7, ConvertFrom-SecureString è anche un'opzione.
  2. Creare un nuovo database SQL, utilizzando l'API Items - Create Item.
  3. Elenca tutti i database SQL in un'area di lavoro Fabric.
  4. Connettersi al database con SQLCMD per eseguire uno script per creare un oggetto.
  5. Elimina il database utilizzando l'API Items - Delete Item.
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. 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 
    );
    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)
}