Udostępnij za pośrednictwem


Tworzenie bazy danych SQL w usłudze Microsoft Fabric za pośrednictwem interfejsu API REST

Dotyczy bazy danych:SQL w usłudze Microsoft Fabric

Platforma sieć szkieletowa ma bogaty zestaw interfejsów API REST, których można użyć do wdrażania zasobów i zarządzania nimi. Te interfejsy API mogą służyć do wdrażania baz danych SQL sieci szkieletowej. Ten artykuł i przykładowy skrypt przedstawiają podstawowy skrypt programu PowerShell, który może służyć do wdrażania bazy danych SQL Fabric i dodawania do niej danych.

Wymagania wstępne

  • Potrzebna jest istniejąca pojemność sieci szkieletowej. Jeśli tego nie zrobisz, uruchom wersję próbną usługi Fabric.
  • Upewnij się, że włączono bazę danych SQL w sieci szkieletowej przy użyciu ustawień dzierżawy portalu administracyjnego.
  • Utwórz nowy obszar roboczy lub użyj istniejącego obszaru roboczego usługi Fabric.
  • Aby utworzyć bazę danych SQL, musisz być członkiem ról administratora lub członka obszaru roboczego.
  • Zainstaluj wersję języka golang programu SQLCMD. Uruchom polecenie winget install sqlcmd w systemie Windows, aby zainstalować. W przypadku innych systemów operacyjnych zobacz aka.ms/go-sqlcmd.
  • Moduł Az programu PowerShell. Uruchom polecenie Install-Module az w programie PowerShell, aby zainstalować.

Tworzenie nowej bazy danych SQL za pomocą interfejsu API REST

W tym przykładowym skrypcie użyto Connect-AzAccountaliasu az login , aby wyświetlić monit o podanie poświadczeń. Używa tych poświadczeń do uzyskania tokenu dostępu do użycia na potrzeby wywołań interfejsu API REST. SqlCMD używa kontekstu konta, które zostało podane do Connect-AzAccount.

Skrypt tworzy bazę danych o nazwie z aliasem zalogowanego użytkownika i datą. Obecnie interfejs API REST nie zwraca stanu, dlatego musimy wykonać pętlę i sprawdzić, czy baza danych ma zostać utworzona. Po utworzeniu bazy danych usługa SQLCMD jest używana do tworzenia niektórych obiektów, a następnie wykonywania zapytań o ich istnienie. Na koniec usuniemy bazę danych.

W poniższym skrypcie zastąp <your workspace id> element identyfikatorem obszaru roboczego usługi Fabric. Identyfikator obszaru roboczego można łatwo znaleźć w adresie URL. Jest to unikatowy ciąg w dwóch / znakach po /groups/ w oknie przeglądarki. Na przykład 11aa111-a11a-1111-1abc-aa1111aaaa w pliku https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.

Ten skrypt pokazuje:

  1. Pobierz token dostępu przy użyciu Get-AzAccessToken i przekonwertuj go z bezpiecznego ciągu. Jeśli używasz programu PowerShell 7, ConvertFrom-SecureString jest również opcją.
  2. Utwórz nową bazę danych SQL przy użyciu Items — Create Item API.
  3. Wyświetl listę wszystkich baz danych SQL w obszarze roboczym Fabric.
  4. Połącz się z bazą danych za pomocą SQLCMD, aby uruchomić skrypt w celu utworzenia obiektu.
  5. Usuń elementy z bazy danych przy użyciu interfejsu API - Delete Item.
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)
}