Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:✅Database SQL in Microsoft Fabric
È possibile usare l'API REST di Fabric per distribuire e gestire le risorse, inclusi i database SQL in Fabric.
Questo articolo e uno script di esempio illustrano come usare PowerShell per chiamare l'API REST di Fabric per distribuire un database SQL di Fabric.
Prerequisiti
- È necessaria una capacità di Fabric esistente. Se non lo fai, avvia una versione di prova di Fabric.
- È possibile usare un'area di lavoro esistente o creare un nuovo spazio di lavoro Fabric.
- Per creare un database SQL, è necessario essere membri dei ruoli Amministratore o Membro per l'area di lavoro .
- Installare la versione golang di SQLCMD. Eseguire
winget install sqlcmdin Windows per l'installazione. Per altri sistemi operativi, vedere aka.ms/go-sqlcmd. - PowerShell 5.1 o PowerShell 7.4 e versioni successive
- Modulo Az PowerShell. Eseguire
Install-Module azin PowerShell per l'installazione.
Creare un nuovo database SQL tramite l'API REST
Questo script di esempio usa Connect-AzAccount, un alias di az login per richiedere le credenziali. Usa queste credenziali per ottenere un token di accesso da usare per le chiamate API REST. SQLCMD usa il contesto dell'account assegnato a Connect-AzAccount.
Lo script crea un database denominato con l'alias dell'utente connesso e la data. Attualmente, l'API REST non restituisce uno stato, quindi è necessario eseguire un ciclo e verificare la presenza del database da creare. Dopo aver creato il database, SQLCMD viene usato per creare alcuni oggetti e quindi eseguire una query sulla loro esistenza. Infine, si elimina il database.
Nel seguente script, sostituire <your workspace id> con l'ID dell'area di lavoro Fabric. È possibile trovare facilmente l'ID di un'area di lavoro nell'URL, ovvero la stringa univoca all'interno di due / caratteri dopo /groups/ nella finestra del browser. Ad esempio, 11aa111-a11a-1111-1abc-aa1111aaaa in https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/.
Questo script illustra:
- Recupera un token di accesso usando Get-AzAccessToken e converti il token da una stringa protetta. Se si usa PowerShell 7, ConvertFrom-SecureString è anche un'opzione.
- Creare un nuovo database SQL, utilizzando l'API Items - Create Item.
- Elenca tutti i database SQL in un'area di lavoro Fabric.
- Connettersi al database con SQLCMD per eseguire uno script per creare un oggetto.
- Elimina il database utilizzando l'API Items - Delete Item.
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)
}
Collazione del database
Per impostazione predefinita, il database viene creato con la collatione senza distinzione tra maiuscole e minuscole SQL_Latin1_General_CP1_CI_AS.
Le regole di confronto del database non possono essere modificate dopo la creazione, anche se le regole di confronto sulle singole colonne sono supportate.
Quando si crea un database SQL con l'API REST, è possibile specificare le regole di confronto in PowerShell. Aggiungere una proprietà denominata creationPayload nella $body tabella hash. La collation proprietà contiene il nome delle regole di confronto, ad esempio:
$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"
}
}