Aracılığıyla paylaş


REST API aracılığıyla Microsoft Fabric'te SQL veritabanı oluşturma

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

Doku platformu, kaynakları dağıtmak ve yönetmek için kullanılabilecek zengin bir REST API kümesine sahiptir. Bu API'ler Doku SQL veritabanlarını dağıtmak için kullanılabilir. Bu makale ve örnek betik, Doku SQL veritabanını dağıtmak ve buna veri eklemek için kullanılabilecek temel bir PowerShell betiğini gösterir.

Önkoşullar

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

Bu örnek betik, kimlik bilgilerini istemde kullanmak için bir diğer adı Connect-AzAccount kullanıraz login. REST API çağrıları için kullanılacak bir erişim belirteci almak için bu kimlik bilgilerini kullanır. SQLCMD, öğesine verilen hesabın bağlamını Connect-AzAccountkullanır.

Betik, oturum açmış kullanıcının diğer adı ve tarihiyle adlı bir veritabanı oluşturur. Şu anda REST API bir durum döndürmediğinden veritabanını döngüye alıp oluşturulup oluşturulmayacağı denetlenmelidir. 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 öğesini Doku çalışma alanı kimliğiniz ile değiştirin <your workspace id> . 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

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