Compartir por


Creación de una base de datos SQL con la API REST para Microsoft Fabric

Se aplica a:bases de datos SQL en Microsoft Fabric

Puede usar la API REST de Fabric para implementar y administrar recursos, como bases de datos SQL en Fabric.

En este artículo y script de ejemplo se muestra cómo usar PowerShell para llamar a la API REST de Fabric para implementar una base de datos SQL de Fabric.

Requisitos previos

Creación de una nueva base de datos SQL a través de la API REST

En este script de ejemplo se usa Connect-AzAccount, un alias de az login para solicitar credenciales. Usa esas credenciales para obtener un token de acceso que se usará para las llamadas a la API REST. SQLCMD usa el contexto de la cuenta que se ha proporcionado a Connect-AzAccount.

El script crea una base de datos denominada con el alias del usuario que ha iniciado sesión y la fecha. Actualmente, la API REST no devuelve un estado, por lo que debemos realizar un bucle y comprobar si se va a crear la base de datos. Una vez creada la base de datos, SQLCMD se usa para crear algunos objetos y, a continuación, consultar su existencia. Por último, se elimina la base de datos.

En el script siguiente, reemplace por <your workspace id> el identificador del área de trabajo de Fabric. Puede encontrar fácilmente el identificador de un área de trabajo en la dirección URL, es la cadena única dentro de dos / caracteres después /groups/ en la ventana del explorador. Por ejemplo, 11aa111-a11a-1111-1abc-aa1111aaaa en https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.

Este script muestra lo siguiente:

  1. Recupere un token de acceso utilizando Get-AzAccessToken y conviértalo de una cadena segura. Si usa PowerShell 7, convertFrom-SecureString también es una opción.
  2. Cree una nueva base de datos SQL utilizando la API Elementos: Crear elemento.
  3. Enumere todas las bases de datos SQL de un área de trabajo de Fabric.
  4. Conéctese a la base de datos con SQLCMD para ejecutar un script para crear un objeto.
  5. Elimine la base de datos mediante Items - Delete Item 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. Connect 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)
}

Intercalación de base de datos

De forma predeterminada, la base de datos se crea con la intercalación SQL_Latin1_General_CP1_CI_ASque no distingue mayúsculas de minúsculas .

No se puede modificar la intercalación de base de datos después de la creación, aunque se admiten intercalaciones en columnas individuales.

Al crear una base de datos SQL con la API REST, puede especificar la intercalación en PowerShell. Agregue una propiedad denominada creationPayload en la $body tabla hash. La collation propiedad contiene el nombre de intercalación, por ejemplo:

$collation = 'Latin1_General_100_BIN2_UTF8' # Desired collation name

$body = @{
    displayName = $matches[0] + (Get-Date -Format "MMddyyyy")
    type = "SQLDatabase"
    description = "Created using public api"
    creationPayload = @{
        collation = $collation
        creationMode = "new"
    }
}