Dela via


Skapa en SQL-databas i Microsoft Fabric via REST API

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

Fabric-plattformen har en omfattande uppsättning REST-API:er som kan användas för att distribuera och hantera resurser. Dessa API:er kan användas för att distribuera Sql-infrastrukturdatabaser. Den här artikeln och exempelskriptet visar ett grundläggande PowerShell-skript som kan användas för att distribuera en Fabric SQL-databas och lägga till data i den.

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 med namnet 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 Infrastruktur-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

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)
}