Freigeben über


Erstellen einer SQL-Datenbank in Microsoft Fabric mithilfe der REST-API

Gilt für:SQL-Datenbank in Microsoft Fabric

Die Fabric-Plattform verfügt über eine Vielzahl von REST-APIs, die zum Bereitstellen und Verwalten von Ressourcen verwendet werden können. Diese APIs können zum Bereitstellen von Fabric SQL-Datenbanken verwendet werden. In diesem Artikel und Beispielskript wird ein einfaches PowerShell-Skript veranschaulicht, das zum Bereitstellen einer Fabric SQL-Datenbank und zum Hinzufügen von Daten zur Fabric SQL-Datenbank verwendet werden kann.

Voraussetzungen

Erstellen einer neuen SQL-Datenbank mithilfe der REST-API

Dieses Beispielskript verwendet Connect-AzAccount, einen Alias von az login, um zur Eingabe von Anmeldeinformationen aufzufordern. Sie verwendet diese Anmeldeinformationen, um ein Zugriffstoken abzurufen, das für die REST-API-Aufrufe verwendet werden soll. SQLCMD verwendet den Kontext des Kontos, der für Connect-AzAccount angegeben wurde.

Das Skript erstellt eine Datenbank mit dem Alias des angemeldeten Benutzers und dem Datum als Namen. Derzeit gibt die REST-API keinen Status zurück, daher muss eine Schleife ausgeführt und überprüft werden, ob die Datenbank erstellt werden soll. Nachdem die Datenbank erstellt wurde, wird SQLCMD verwendet, um einige Objekte zu erstellen und dann deren Vorhandensein abzufragen. Schließlich wird die Datenbank gelöscht.

Ersetzen Sie im folgenden Skript <your workspace id> durch Ihre Fabric-Arbeitsbereichs-ID. Sie können die ID eines Arbeitsbereichs ganz einfach in der URL finden; es ist die eindeutige Zeichenfolge innerhalb von zwei /-Zeichen nach /groups/ in Ihrem Browserfenster. Beispiel: 11aa111-a11a-1111-1abc-aa1111aaaa in https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.

Dieses Skript veranschaulicht Folgendes:

  1. Rufen Sie mithilfe von Get-AzAccessToken ein Zugriffstoken ab, und konvertieren Sie es aus einer sicheren Zeichenfolge. Bei Verwendung von PowerShell 7 ist ConvertFrom-SecureString ebenfalls eine Option.
  2. Erstellen Sie eine neue SQL-Datenbank mithilfe der Items - Create Item API.
  3. Auflisten aller SQL-Datenbanken in einem Fabric-Arbeitsbereich.
  4. Stellen Sie eine Verbindung mit der Datenbank mit SQLCMD- her, um ein Skript auszuführen, um ein Objekt zu erstellen.
  5. Löschen Sie die Datenbank mithilfe der Items - Delete Item 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)
}