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.
Questo articolo illustra come creare un'attività script in Azure Data Factory per eseguire query PostgreSQL personalizzate. Con l'attività script è possibile eseguire vari tipi di comandi PostgreSQL, ad esempio DML (Data Manipulation Language) e DDL (Data Definition Language), direttamente nelle pipeline.
Istruzioni DML:INSERT, UPDATE, DELETEe SELECT
Istruzioni DDL:CREATE, ALTERe DROP
Prerequisites
- Istanza del server flessibile di Database di Azure per PostgreSQL. Per altre informazioni, vedere Creare un database di Azure per PostgreSQL.
- (Facoltativo) Un runtime di integrazione di Azure creato all'interno di una rete virtuale gestita.
- Servizio collegato di Azure Data Factory connesso a Database di Azure per PostgreSQL.
Creare un'attività script
In Azure Data Factory Studio, selezionare l'hub Autore. Passare il puntatore del mouse sulla sezione Pipeline , selezionare ... a sinistra e selezionare Nuova pipeline per creare una nuova pipeline.
In Generale trascina e rilascia l'attività script nella pipeline.
- Nella scheda Generale assegnare un nome all'attività script.
Passare alla scheda Impostazioni e selezionare il servizio collegato Database di Azure per PostgreSQL o crearne uno nuovo. Dopo l'aggiunta, selezionare Test connessione per verificare che la connessione sia valida.
Selezionare l'opzione Query o NonQuery a seconda dello script.
L'attività script supporta sia istruzioni query che nonquery.
Le istruzioni di query eseguono istruzioni PostgreSQL che restituiscono risultati. Spesso istruzioni
SELECT. Un'istruzione "Query" restituisce i record di dati.Esempio di un payload con una query.
{ "name": "Sample of select statement", "type": "Script", "dependsOn": [], "policy": { "timeout": "1.12:00:00", "retry": 0, "retryIntervalInSeconds": 30, "secureOutput": false, "secureInput": false }, "userProperties": [], "linkedServiceName": { "referenceName": "AzurePostgreSQL", "type": "LinkedServiceReference" }, "typeProperties": { "scripts": [ { "type": "Query", "text": "SELECT * FROM sample_table WHERE sample_int = 100; " } ], "scriptBlockExecutionTimeout": "02:00:00" } }
Creare più script all'interno di un'attività di script
È possibile includere più query in un'attività script selezionando il + segno accanto a Script per aggiungere un nuovo input di script.
È possibile eliminare le caselle di input delle query usando l'icona di eliminazione accanto a Script.
Ecco un esempio di payload con due query separate.
{
"name": "Sample of multiple select statements",
"type": "Script",
"dependsOn": [],
"policy": {
"timeout": "1.12:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"linkedServiceName": {
"referenceName": "AzurePostgreSQL1",
"type": "LinkedServiceReference"
},
"typeProperties": {
"scripts": [
{
"type": "Query",
"text": "SELECT * FROM sample_table WHERE sample_int = 100; "
},
{
"type": "Query",
"text": "SELECT * FROM sample_table WHERE sample_int > 250; "
}
],
"scriptBlockExecutionTimeout": "02:00:00"
}
}
Parametri dello script
Important
Le istruzioni di query multiple che usano parametri di output non sono supportate. Suddividere tutte le query di output in blocchi di script separati all'interno della stessa attività script o diversa.
L'attività script supporta due tipi di parametri di script: parametri posizionali e parametri con nome. I parametri denominati usano il nome dei parametri e vengono specificati come @<name> nelle query. I parametri posizionali usano l'indice dei parametri e vengono specificati nella query in ordine come $<position number> con un indice iniziale pari a 1.
Parametri denominati (scelta consigliata)
I parametri denominati usano un @ prefisso per il nome del parametro.
Impostare i parametri denominati come parametri di output impostando il valore su Null con la casella Considera come null selezionata nell'interfaccia utente e con il payload lasciato vuoto o null. Il valore nel testo deve essere Null.
Il nome impostato all'interno della routine per l'output è il nome usato nell'output dei dati resultSets . Il nome impostato nella riga di output dell'interfaccia utente viene usato per il nome di outputParameters.
Risultato di esempio dall'esecuzione dell'interfaccia utente
"resultSetCount": 1,
"recordsAffected": 0,
"resultSets": [
{
"rowCount": 1,
"rows": [
{
"output1": 10,
"output2": "\"Hello World\""
}
]
}
],
"outputParameters": {
"output10": 10,
"output20": "\"Hello World\""
}
Esempio di payload per il parametro di output.
"scripts": [
{
"text": "CREATE OR REPLACE PROCEDURE swap_proc (input1 IN TEXT, input2 IN BIGINT, output1 OUT BIGINT, output2 OUT TEXT) LANGUAGE plpgsql AS $$ DECLARE BEGIN output2 := input1; output1 := input2; END $$",
"type": "NonQuery"
},
{
"text": "CALL swap_proc(@input1, @input2, null, null)",
"type": "Query",
"parameters": [
{
"name": "input1",
"type": "String",
"value": "Hello world",
"direction": "Input",
"size": 100
},
{
"name": "input2",
"type": "INT32",
"value": 1234,
"direction": "Input"
},
{
"name": "output1",
"type": "INT32",
"direction": "Output"
},
{
"name": "output2",
"type": "String",
"direction": "Output",
"size": 100
}
]
}
]
Parametri posizionali
Important
Le istruzioni contenenti più query che utilizzano parametri posizionali non sono supportate. Assicurarsi che tutte le query con parametri posizionali si trovino in blocchi di script separati all'interno della stessa o diversa attività script.
Per usare i parametri posizionali, usare un segnaposto di $<positional number> nella query. Nei parametri il name campo deve essere lasciato vuoto nell'interfaccia utente e specificato come null nel payload.
"scripts": [
{
"text": "SELECT * FROM customers WHERE first_name = $1 AND age = $2;",
"type": "Query",
"parameters": [
{
"name": null,
"type": "String",
"value": "John",
"direction": "Input",
"size": 256
},
{
"name": null,
"type": "INT32",
"value": 52,
"direction": "Input"
}
]
}
]
Esempio di parametro posizionale valido
"scripts": [
{
"text": "SELECT * FROM customers WHERE first_name = $1;",
"type": "Query",
"parameters": [
{
"name": null,
"type": "String",
"value": "John",
"direction": "Input",
"size": 256
}
]
},
{
"text": "SELECT * FROM customers WHERE age = $2;",
"type": "Query",
"parameters": [
{
"name": null,
"type": "INT32",
"value": 52,
"direction": "Input"
}
]
}
]
Esempio di parametro posizionale non valido
"scripts": [
{
"text": "SELECT * FROM customers WHERE first_name = $1; SELECT * FROM customers WHERE age = $2;",
"type": "Query",
"parameters": [
{
"name": null,
"type": "String",
"value": "John",
"direction": "Input",
"size": 256
},
{
"name": null,
"type": "INT32",
"value": 52,
"direction": "Input"
}
]
}
]
Impostazioni avanzate
Le impostazioni avanzate nell'attività script di Azure Data Factory per PostgreSQL consentono di ottimizzare le opzioni di esecuzione e registrazione per i flussi di lavoro dei dati. È possibile impostare un timeout per il blocco di script per arrestare le query con esecuzione prolungata che influiscono sull'affidabilità della pipeline e attivare la registrazione dettagliata per tenere traccia degli avvisi e degli output delle attività di PostgreSQL. Queste funzionalità consentono di mantenere forti le operazioni dei dati e di offrire maggiore visibilità sulle esecuzioni della pipeline in Azure.
Timeout di esecuzione del blocco di script
Impostare un timeout in minuti per ogni esecuzione del blocco di script. Se un blocco di script nell'attività script supera il timeout, l'intera attività ha esito negativo.
"typeProperties": {
"scripts": [
{
"type": "Query",
"text": "SELECT pg_sleep(40);"
},
{
"type": "Query",
"text": "SELECT pg_sleep(40);"
},
{
"type": "Query",
"text": "SELECT pg_sleep(40);"
}
],
"scriptBlockExecutionTimeout": "00:01:00"
}
Logging
Usare la registrazione per inviare avvisi di PostgreSQL a un'archiviazione Blob esterna o a una memoria interna.
Archiviazione esterna
Per la registrazione esterna, aprire la scheda Avanzate , quindi selezionare Abilita registrazione e Archiviazione esterna. È possibile aggiungere un account di archiviazione BLOB creando un nuovo servizio collegato per l'account di archiviazione BLOB. Facoltativamente, è possibile immettere un percorso di cartella. Se si lascia vuoto, i log vengono visualizzati nella cartella scriptactivity-logs .
"typeProperties": {
"scripts": [
{
"type": "Query",
"text": "DO $$ BEGIN RAISE Notice 'Hello'; RAISE Notice 'World!'; END $$;"
}
],
"scriptBlockExecutionTimeout": "02:00:00",
"logSettings": {
"logDestination": "ExternalStore",
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "<Azure Blob Storage linked service name>",
"type": "LinkedServiceReference"
},
"path": "<Azure Blob Storage folder path>"
}
}
}
Output dell'attività
Per la registrazione dell'output dell'attività, espandere la sezione Avanzate e selezionare Abilitare la registrazione e Output dell’attività. Queste opzioni attivano la registrazione nell'output dell'attività.
"typeProperties": {
"scripts": [
{
"type": "Query",
"text": "DO $$ BEGIN RAISE Notice 'Hello'; RAISE Notice 'World!'; END $$;"
}
],
"scriptBlockExecutionTimeout": "02:00:00",
"logSettings": {
"logDestination": "ActivityOutput"
}
}