Delen via


Een SQL-database maken in Microsoft Fabric via REST API

Van toepassing op:SQL-database in Microsoft Fabric

Het Fabric-platform heeft een uitgebreide set REST API's die kunnen worden gebruikt voor het implementeren en beheren van resources. Deze API's kunnen worden gebruikt om Fabric SQL-databases te implementeren. Dit artikel en voorbeeldscript laten een eenvoudig PowerShell-script zien dat kan worden gebruikt om een Fabric SQL-database te implementeren en er gegevens aan toe te voegen.

Vereisten

Een nieuwe SQL-database maken via REST API

In dit voorbeeldscript wordt Connect-AzAccounteen alias gebruikt om az login om referenties te vragen. Deze referenties worden gebruikt om een toegangstoken te verkrijgen dat moet worden gebruikt voor de REST API-aanroepen. SQLCMD maakt gebruik van de context van het account dat is gegeven aan Connect-AzAccount.

Het script maakt een database met de naam met de alias van de aangemelde gebruiker en de datum. Momenteel retourneert de REST API geen status, dus we moeten lus uitvoeren en controleren of de database moet worden gemaakt. Nadat de database is gemaakt, wordt SQLCMD gebruikt om enkele objecten te maken en vervolgens te zoeken naar hun bestaan. Ten slotte verwijderen we de database.

Vervang in het volgende script door <your workspace id> de id van uw Fabric-werkruimte. U kunt de id van een werkruimte gemakkelijk vinden in de URL. Dit is de unieke tekenreeks binnen twee / tekens na /groups/ in uw browservenster. Bijvoorbeeld 11aa111-a11a-1111-1abc-aa1111aaaa in https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.

Dit script demonstreert:

  1. Haal een toegangstoken op met behulp van Get-AzAccessToken en converteer het vanuit een beveiligde tekenreeks. Als u PowerShell 7 gebruikt, is ConvertFrom-SecureString- ook een optie.
  2. Maak een nieuwe SQL-database met behulp van de Items - Item-API maken.
  3. Een lijst weergeven van alle SQL-databases in een Fabric-werkruimte.
  4. Maak verbinding met de database met SQLCMD- om een script uit te voeren om een object te maken.
  5. Verwijder de database door de Items - Verwijder Item APIte gebruiken.
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)
}