Blocco anonimo in Query Service
Adobe Experience Platform Query Service supporta blocchi anonimi. La funzione di blocco anonimo consente di concatenare una o più istruzioni SQL eseguite in sequenza. Consentono inoltre di gestire le eccezioni.
La funzione di blocco anonimo rappresenta un modo efficiente per eseguire una sequenza di operazioni o query. La catena di query all’interno del blocco può essere salvata come modello e pianificata per l’esecuzione in un determinato momento o intervallo. Queste query possono essere utilizzate per scrivere e accodare dati per creare un nuovo set di dati e vengono in genere utilizzate nei casi in cui si dispone di una dipendenza.
La tabella fornisce un raggruppamento delle sezioni principali del blocco: esecuzione e gestione delle eccezioni. Le sezioni sono definite dalle parole chiave BEGIN
, END
e EXCEPTION
.
BEGIN
e termina con la parola chiave END
. Qualsiasi set di istruzioni incluso nelle parole chiave BEGIN
e END
verrà eseguito in sequenza e garantisce che le query successive non vengano eseguite fino al completamento della query precedente nella sequenza.EXCEPTION
. Contiene il codice per intercettare e gestire le eccezioni in caso di errore di una qualsiasi delle istruzioni SQL nella sezione di esecuzione. Se una delle query ha esito negativo, l’intero blocco viene interrotto.È opportuno notare che un blocco è un’istruzione eseguibile e può pertanto essere nidificato all’interno di altri blocchi.
Query di blocco anonime di esempio
Nella query seguente viene illustrato un esempio di concatenamento di istruzioni SQL. Per ulteriori informazioni sulla sintassi SQL utilizzata, vedere il documento Sintassi SQL in Query Service.
$$ BEGIN
CREATE TABLE ADLS_TABLE_A AS SELECT * FROM ADLS_TABLE_1....;
....
CREATE TABLE ADLS_TABLE_D AS SELECT * FROM ADLS_TABLE_C....;
EXCEPTION WHEN OTHER THEN SET @ret = SELECT 'ERROR';
END
$$;
Nell'esempio seguente, SET
mantiene il risultato di una query SELECT
nella variabile locale specificata. La variabile ha l’ambito del blocco anonimo.
L'ID snapshot è archiviato come variabile locale (@current_sid
). Viene quindi utilizzato nella query successiva per restituire risultati basati sullo SNAPSHOT dello stesso set di dati/tabella. Per ulteriori informazioni sulla clausola snapshot, vedere la documentazione relativa alla sintassi SQL.
$$ BEGIN
SET @current_sid = SELECT parent_id FROM (SELECT history_meta('your_table_name')) WHERE is_current = true;
CREATE temp table abcd_temp_table AS SELECT count(1) FROM your_table_name SNAPSHOT SINCE @current_sid;
END
$$;
Blocco anonimo con client di terze parti third-party-clients
Alcuni client di terze parti possono richiedere un identificatore separato prima e dopo un blocco SQL per indicare che una parte dello script deve essere gestita come una singola istruzione. Se viene visualizzato un messaggio di errore quando si utilizza Query Service con un client di terze parti, è necessario fare riferimento alla documentazione del client di terze parti relativa all'utilizzo di un blocco SQL.
Ad esempio, DbVisualizer richiede che il delimitatore sia l'unico testo sulla riga. In DbVisualizer il valore predefinito per l'identificatore iniziale è --/
e per l'identificatore finale è /
. Di seguito è riportato un esempio di blocco anonimo in DbVisualizer:
--/
$$ BEGIN
CREATE TABLE ADLS_TABLE_A AS SELECT * FROM ADLS_TABLE_1....;
....
CREATE TABLE ADLS_TABLE_D AS SELECT * FROM ADLS_TABLE_C....;
EXCEPTION WHEN OTHER THEN SET @ret = SELECT 'ERROR';
END
$$;
/
Nell'interfaccia utente di DbVisualizer, in particolare, è inoltre disponibile un'opzione per "Execute the complete buffer as one SQL statement". Per ulteriori informazioni, consulta la documentazione di DbVisualizer.
Passaggi successivi
Una volta letto questo documento, avrai una chiara comprensione dei blocchi anonimi e della loro struttura. Per ulteriori informazioni sulla scrittura delle query, leggere la guida all'esecuzione delle query.
Per aumentare l'efficienza delle query, è inoltre necessario leggere le modalità di utilizzo dei blocchi anonimi con il modello di struttura del caricamento incrementale.