Sdílet prostřednictvím


Vytvoření databáze SQL pomocí rozhraní REST API pro Microsoft Fabric

Platí pro:SQL databáze v Microsoft Fabric

K nasazení a správě prostředků můžete použít Fabric REST API, včetně databází SQL v systému Fabric.

Tento článek a ukázkový skript ukazují, jak pomocí PowerShellu volat Fabric REST API pro nasazení Fabric SQL databáze.

Požadavky

Vytvoření nové databáze SQL prostřednictvím rozhraní REST API

Tento ukázkový skript používá Connect-AzAccount, což je alias pro az login, k výzvě k zadání přihlašovacích údajů. Tyto přihlašovací údaje používá k získání přístupového tokenu, který se použije pro volání rozhraní REST API. SQLCMD používá kontext účtu, který byl předán Connect-AzAccount.

Skript vytvoří databázi s názvem alias přihlášeného uživatele a datem. V současné době rozhraní REST API nevrací stav, takže musíme provádět opakované kontroly a zjistit, zda byla databáze vytvořena. Po vytvoření databáze se SQLCMD použije k vytvoření některých objektů a následnému dotazování na jejich existenci. Nakonec databázi odstraníme.

V tomto skriptu nahraďte <your workspace id> za ID vašeho pracovního prostoru Fabric. ID pracovního prostoru můžete snadno najít v adrese URL. Jedná se o jedinečný řetězec uvnitř dvou / znaků za /groups/ oknem prohlížeče. Například 11aa111-a11a-1111-1abc-aa1111aaaa v https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.

Tento skript ukazuje:

  1. Přístupový token načtěte pomocí Get-AzAccessToken a jej převedete ze zabezpečeného řetězce. Pokud používáte verzi PowerShell 7, ConvertFrom-SecureString je také jednou z možností.
  2. Vytvořte novou databázi SQL pomocí Items - Create Item API.
  3. Seznam SQL databází ve Fatě pracovního prostoru.
  4. Připojte se k databázi pomocí SQLCMD ke spuštění skriptu pro vytvoření objektu.
  5. Odstraňte databázi pomocí Položek – rozhraní API pro odstranění položek.
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. 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 
    );
    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)
}