Creación de una base de datos SQL en Microsoft Fabric a través de la API REST
Se aplica a:✅bases de datos SQL en Microsoft Fabric
La plataforma Fabric tiene un amplio conjunto de API REST que se pueden usar para implementar y administrar recursos. Esas API se pueden usar para implementar bases de datos SQL de Fabric. En este artículo y script de ejemplo se muestra un script básico de PowerShell que se puede usar para implementar una base de datos SQL de Fabric y agregar datos a ella.
Requisitos previos
- Necesita una capacidad de Fabric existente. Si no tiene, inicie una versión de prueba de Fabric.
- Asegúrese de habilitar la Base de datos SQL de Fabric mediante la configuración de inquilinos del Portal de administración.
- Crear una nueva área de trabajo o usar una área de trabajo existente de Fabric.
- Debe ser miembro de los roles de administrador o miembro del área de trabajo para crear una base de datos SQL.
- Instale la versión golang de SQLCMD. Ejecute
winget install sqlcmd
en Windows para instalar. Para otros sistemas operativos, consulte aka.ms/go-sqlcmd. - El módulo Az de PowerShell. Ejecute
Install-Module az
en PowerShell para instalar.
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:
- 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.
- Cree una nueva base de datos SQL utilizando la API Elementos: Crear elemento.
- Enumere todas las bases de datos SQL de un área de trabajo de Fabric.
- Conéctese a la base de datos con SQLCMD para ejecutar un script para crear un objeto.
- Elimine la base de datos mediante Items - Delete Item API.
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)
}