Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
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
- Necesita contar con una capacidad de Fabric existente. Si no tiene, inicie una versión de prueba de Fabric.
- Puede usar un área de trabajo existente o crear un área de trabajo 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 sqlcmden Windows para instalar. Para otros sistemas operativos, consulte aka.ms/go-sqlcmd. - PowerShell 5.1 o PowerShell 7.4 y versiones posteriores
- El módulo Az de PowerShell. Ejecute
Install-Module azen 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
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"
}
}