Aracılığıyla paylaş


Microsoft Fabric için REST API ile SQL veritabanı oluşturma

Şunlar için geçerlidir:Microsoft Fabric'te SQL veritabanı

Doku REST API'sini kullanarak kaynakları dağıtabilir ve yönetebilir, Doku'ya SQL veritabanlarını ekleyebilirsiniz.

Bu makalede ve örnek betikte, Bir Doku SQL veritabanı dağıtmak üzere Doku REST API'sini çağırmak için PowerShell'in nasıl kullanılacağı gösterilmektedir.

Önkoşullar

REST API aracılığıyla yeni bir SQL veritabanı oluşturma

Bu örnek betik, kimlik bilgilerini istemek için Connect-AzAccount, az login'ın bir takma adı olarak kullanır. REST API çağrıları için kullanılacak bir erişim belirteci almak için bu kimlik bilgilerini kullanır. SQLCMD, Connect-AzAccount'e verilen hesabın bağlamını kullanır.

Betik, oturum açan kullanıcının takma adı ve tarihten oluşan bir isimle veritabanı oluşturur. REST API şu anda herhangi bir durum döndürmediği için döngü kurmalı ve veritabanının oluşturulup oluşturulmadığını kontrol etmeliyiz. Veritabanı oluşturulduktan sonra, SQLCMD bazı nesneler oluşturmak ve sonra bunların varlığını sorgulamak için kullanılır. Son olarak veritabanını siliyoruz.

Aşağıdaki betikte <your workspace id> ifadesini Doku çalışma alanı kimliğinizle değiştirin. Url'de bir çalışma alanının kimliğini kolayca bulabilirsiniz. Bu, tarayıcı pencerenizde iki / karakterden sonra /groups/ gelen benzersiz dizedir. Örneğin, 11aa111-a11a-1111-1abc-aa1111aaaa içinde https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.

Bu skript şunu tanımlar:

  1. Get-AzAccessToken kullanarak bir erişim belirteci alın ve bunugüvenli bir dizgeden dönüştürün. PowerShell 7 kullanıyorsanız ConvertFrom-SecureString de bir seçenektir.
  2. Öğeleri - Öğe Oluşturma API'sinikullanarak yeni bir SQL veritabanı oluşturun.
  3. Fabric çalışma alanında tüm SQL veritabanlarını listeleyin.
  4. Nesne oluşturmak üzere bir betik çalıştırmak için SQLCMD ile veritabanına bağlanın.
  5. Öğeleri - Öğe Silme API'sinikullanarak veritabanını silin.
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)
}