Dela via


Skapa en SQL-databas med REST API för Microsoft Fabric

gäller för:SQL-databas i Microsoft Fabric

Du kan använda REST-API:et för infrastrukturresurser för att distribuera och hantera resurser, inklusive SQL-databaser i Infrastrukturresurser.

Den här artikeln och exempelskriptet visar hur du använder PowerShell för att anropa Fabric REST-API:et för att distribuera en Fabric SQL-databas.

Förutsättningar

Skapa en ny SQL-databas via REST API

Det här exempelskriptet använder Connect-AzAccount, ett alias az login för för att fråga efter autentiseringsuppgifter. Den använder dessa autentiseringsuppgifter för att hämta en åtkomsttoken som ska användas för REST API-anropen. SQLCMD använder kontexten för det konto som gavs till Connect-AzAccount.

Skriptet skapar en databas namngiven med den inloggade användarens alias och datumet. Rest-API:et returnerar för närvarande inte någon status, så vi måste loopa och söka efter databasen som ska skapas. När databasen har skapats används SQLCMD för att skapa vissa objekt och sedan fråga efter deras existens. Slutligen tar vi bort databasen.

I följande skript ersätter du <your workspace id> med ditt Fabric arbetsyte-ID. Du hittar enkelt ID:t för en arbetsyta i URL:en, det är den unika strängen inuti två / tecken efter /groups/ i webbläsarfönstret. Till exempel 11aa111-a11a-1111-1abc-aa1111aaaa i https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.

Det här skriptet visar:

  1. Hämta en åtkomsttoken med Get-AzAccessToken och konvertera den från en säker sträng. Om du använder PowerShell 7 är ConvertFrom-SecureString också ett alternativ.
  2. Skapa en ny SQL-databas med hjälp av Objekt – Skapa objekt-API.
  3. Lista alla SQL-databaser i en Fabric-arbetsyta.
  4. Anslut till databasen med SQLCMD- för att köra ett skript för att skapa ett objekt.
  5. Ta bort databasen med hjälp av Objekt – Ta bort objekt-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)
}

Databaskollation

Som standard skapas databasen med skiftlägesokänslig sortering SQL_Latin1_General_CP1_CI_AS.

Databassortering kan inte ändras efter skapandet, men sortering på enskilda kolumner stöds.

När du skapar en SQL-databas med REST-API:et kan du ange sorteringen i PowerShell. Lägg till en egenskap med namnet creationPayload i $body hashtable. Egenskapen collation innehåller sorteringsnamnet, till exempel:

$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"
    }
}