แชร์ผ่าน


สร้างฐานข้อมูล SQL ด้วย REST API สําหรับ Microsoft Fabric

นําไปใช้กับ:ฐานข้อมูล SQL ใน Microsoft Fabric

คุณสามารถใช้ Fabric REST API เพื่อปรับใช้และจัดการทรัพยากร รวมถึงฐานข้อมูล SQL ใน Fabric

บทความนี้และสคริปต์ตัวอย่างสาธิตวิธีการใช้ PowerShell เพื่อเรียกใช้ Fabric REST API เพื่อปรับใช้ฐานข้อมูล Fabric SQL

ข้อกำหนดเบื้องต้น

สร้างฐานข้อมูล SQL ใหม่ผ่านทาง REST API

สคริปต์ตัวอย่างนี้ใช้ Connect-AzAccountนามแฝงของ az login เพื่อพร้อมท์สําหรับข้อมูลประจําตัว ซึ่งใช้ข้อมูลประจําตัวเหล่านั้นเพื่อขอรับโทเค็นการเข้าถึงเพื่อใช้สําหรับการเรียกใช้ REST API SQLCMD ใช้บริบทของบัญชีที่มอบให้Connect-AzAccount

สคริปต์จะสร้างฐานข้อมูลที่ชื่อว่า ด้วยนามแฝงของผู้ใช้ที่เข้าสู่ระบบและวันที่ ในปัจจุบัน REST API ไม่แสดงสถานะดังนั้นเราต้องวนรอบและตรวจสอบฐานข้อมูลที่จะสร้าง หลังจากสร้างฐานข้อมูลแล้ว SQLCMD จะถูกใช้เพื่อสร้างวัตถุบางอย่างและคิวรีสําหรับการมีอยู่ของฐานข้อมูล สุดท้าย เราลบฐานข้อมูล

ในสคริปต์ต่อไปนี้ ให้แทนที่ <your workspace id> ด้วย ID พื้นที่ทํางาน Fabric ของคุณ คุณสามารถ ค้นหา ID ของพื้นที่ทํางาน ได้อย่างง่ายดายใน URL ซึ่งเป็นสตริงที่ไม่ซ้ํากันภายในสอง / อักขระหลังจาก /groups/ ในหน้าต่างเบราว์เซอร์ของคุณ ตัวอย่างเช่น 11aa111-a11a-1111-1abc-aa1111aaaa ในhttps://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/

สคริปต์นี้สาธิต:

  1. เรียกใช้โทเค็นการเข้าถึงโดยใช้ Get-AzAccessToken และ แปลงจากสตริงที่ปลอดภัย ถ้าใช้ PowerShell 7 ConvertFrom-SecureString ก็เป็นตัวเลือกเช่นกัน
  2. สร้างฐานข้อมูล SQL ใหม่โดยใช้ Items - สร้าง API รายการ
  3. ทํารายการฐานข้อมูล SQL ทั้งหมดในพื้นที่ทํางาน Fabric
  4. เชื่อมต่อกับฐานข้อมูลด้วย SQLCMD เพื่อเรียกใช้สคริปต์เพื่อสร้างวัตถุ
  5. ลบฐานข้อมูลโดยใช้รายการ - ลบรายการ API
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)
}