Questo documento mostra come definire la relazione tra gli oggetti nel flusso di lavoro in Dataform dichiarando le dipendenze.
Puoi definire una relazione di dipendenza tra gli oggetti di un workflow. In una relazione di dipendenza, l'esecuzione dell'oggetto dipendente dipende dall'esecuzione dell'oggetto di dipendenza. Ciò significa che Dataform esegue la dipendenza dopo la dipendenza. Definisci la relazione dichiarando le dipendenze all'interno del file di definizione SQLX dell'oggetto dipendente.
Le dichiarazioni di dipendenza costituiscono un albero delle dipendenze del workflow che determina l'ordine in cui Dataform esegue le azioni del workflow.
Puoi definire la relazione di dipendenza tra le seguenti azioni del flusso di lavoro:
- Dichiarazioni delle origini dati
- Dichiarazioni delle origini dati BigQuery che consentono di fare riferimento a queste origini dati nelle definizioni delle tabelle Dataform e nelle operazioni SQL. Puoi impostare una dichiarazione di origine dati come dipendenza, ma non come dipendente.
- Tabelle
- Tabelle create in Dataform in base alle origini dati dichiarate o ad altre tabelle nel flusso di lavoro. Dataform supporta i seguenti tipi di tabelle: tabella, tabella incrementale, visualizzazione e vista materializzata. Puoi impostare una tabella come dipendenza e come dipendente.
- Operazioni SQL personalizzate
- Istruzioni SQL che Dataform esegue in BigQuery così come sono,
senza modifiche. Puoi impostare un'operazione SQL personalizzata definita in un file
type: operationscome dipendenza e come dipendente. Per dichiarare un'operazione SQL personalizzata come dipendenza nella funzioneref, devi impostare la proprietàhasOutputsutruenel file di definizione SQLX dell'operazione SQL personalizzata. - Assertions
- Query di test della qualità dei dati che puoi utilizzare per testare i dati delle tabelle.
Dataform esegue le asserzioni ogni volta che aggiorna il flusso di lavoro e
ti avvisa se una qualsiasi asserzione non riesce. Puoi impostare un'asserzione definita in un
file
type: assertioncome dipendenza e come dipendente dichiarando le dipendenze nel bloccoconfig.
Puoi definire la relazione di dipendenza nei seguenti modi:
- Dichiara una dipendenza utilizzando la funzione
refdi Dataform Core per fare riferimento alla dipendenza in un'istruzioneSELECT. - Dichiara un elenco di dipendenze nel blocco
configdi un file di definizione SQLX.
Prima di iniziare
- Crea e inizializza un workspace di sviluppo nel repository.
- (Facoltativo) Dichiara un'origine dati.
- Crea almeno due azioni del flusso di lavoro: tabelle, asserzioni, dichiarazioni di origini dati o operazioni.
Ruoli obbligatori
Per ottenere le autorizzazioni
necessarie per dichiarare le dipendenze per tabelle, asserzioni, dichiarazioni di origini dati e operazioni SQL personalizzate,
chiedi all'amministratore di concederti il ruolo IAM
Editor Dataform (roles/dataform.editor) negli spazi di lavoro.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Dichiarare una dipendenza come argomento della funzione ref
Per fare riferimento e dichiarare automaticamente una dipendenza in un'istruzione SELECT,
aggiungi la dipendenza come argomento della funzione ref.
La funzione ref è una funzione integrata di Dataform Core che ti consente di fare riferimento e dipendere automaticamente da qualsiasi tabella, dichiarazione dell'origine dati o operazione SQL personalizzata con la proprietà hasOutput impostata su true nel workflow.
Per saperne di più sulla funzione ref, consulta la
documentazione di riferimento sui metodi di contesto principali di Dataform.
Per saperne di più sull'utilizzo della funzione ref in una definizione di tabella, vedi
Informazioni sulle definizioni di tabella.
Il seguente esempio di codice mostra la dichiarazione dell'origine dati source_data aggiunta
come argomento della funzione ref nel file di definizione SQLX
di una tabella incrementale:incremental_table.sqlx
// filename is incremental_table.sqlx
config { type: "incremental" }
SELECT * FROM ${ref("source_data")}
Nell'esempio di codice precedente, source_data viene dichiarato automaticamente come
dipendenza di incremental_table.
Il seguente esempio di codice mostra il file SQLX di definizione della tabella some_table aggiunto
come argomento della funzione ref nel file di definizione SQLX
di un'asserzione:custom_assertion.sqlx
// filename is custom_assertion.sqlx
config { type: "assertion" }
SELECT
*
FROM
${ref("some_table")}
WHERE
a is null
or b is null
or c is null
Nell'esempio di codice precedente, some_table viene dichiarato automaticamente come
dipendenza di custom_assertion. Durante l'esecuzione, Dataform esegue
some_table prima e poi custom_assertion una volta creato some_table.
Dichiarare le dipendenze nel blocco config
Per dichiarare le dipendenze a cui non viene fatto riferimento nella definizione dell'istruzione SQL della dipendenza, ma che devono essere eseguite prima della tabella, dell'asserzione o dell'operazione SQL personalizzata, segui questi passaggi:
- Nell'area di lavoro di sviluppo, nel riquadro File, espandi
la directory
definitions/. - Seleziona il file SQLX della tabella, dell'asserzione o dell'operazione SQL personalizzata che vuoi modificare.
Nel blocco
configdel file, inserisci il seguente snippet di codice:dependencies: [ "DEPENDENCY", ]Sostituisci DEPENDENCY con la stringa di destinazione, ad esempio il nome file dell'azione che vuoi aggiungere come dipendenza. Puoi inserire più target separati da virgole.
(Facoltativo) Fai clic su Formato.
Il seguente esempio di codice mostra la tabella some_table e l'asserzione some_assertion
aggiunte come dipendenze al blocco config di un file di definizione della tabella:
config { dependencies: [ "some_table", "some_assertion" ] }
Impostare le asserzioni come dipendenze
Quando l'azione del flusso di lavoro B dipende dall'azione del flusso di lavoro A, che ha asserzioni, il mancato rispetto delle asserzioni dell'azione A non impedisce a Dataform di eseguire l'azione B. Per eseguire l'azione B solo se le asserzioni dell'azione A vengono superate, devi impostare le asserzioni dell'azione A come dipendenze dell'azione B.
Puoi impostare le asserzioni come dipendenze di un'azione selezionata nei seguenti modi:
- Imposta le asserzioni selezionate come dipendenze
Puoi impostare manualmente le asserzioni selezionate come dipendenze aggiungendole alla riga
dependencies: [ "" ]nel bloccoconfigdell'azione modificata.Ad esempio, se l'azione B dipende dall'azione A e vuoi che l'azione B dipenda solo dalle asserzioni selezionate dell'azione A, puoi aggiungere queste asserzioni selezionate al blocco
configdell'azione B.Puoi impostare manualmente le asserzioni selezionate come dipendenze per tutti i tipi di azione, ad eccezione delle dichiarazioni delle origini dati.
- Imposta le asserzioni di un'azione di dipendenza selezionata come dipendenze
Puoi impostare il parametro
includeDependentAssertionsin modo da impostare automaticamente tutte le asserzioni dirette di un'azione del flusso di lavoro di dipendenza selezionata come dipendenze dell'azione modificata. Dataform aggiunge queste asserzioni come dipendenze durante ogni compilazione dell'azione per verificare che le dipendenze siano aggiornate se le asserzioni dell'azione di dipendenza cambiano.Ad esempio, se l'azione C dipende dalle azioni A e B, ma vuoi che l'azione C dipenda solo dalle asserzioni dell'azione A, puoi modificare l'azione C e impostare il parametro
includeDependentAssertionsin modo che tutte le asserzioni dell'azione A vengano impostate automaticamente come dipendenze dell'azione C.Puoi impostare il parametro
includeDependentAssertionsper le azioni dei seguenti tipi:tableviewoperations
- Imposta le asserzioni di tutte le azioni di dipendenza come dipendenze
Puoi impostare il parametro
dependOnDependencyAssertionsper impostare automaticamente tutte le asserzioni dirette di tutte le azioni di dipendenza dell'azione modificata come dipendenze aggiuntive dell'azione modificata. Dataform aggiunge queste asserzioni come dipendenze durante ogni compilazione dell'azione per verificare che le dipendenze siano aggiornate se le asserzioni dell'azione di dipendenza cambiano.Ad esempio, se l'azione C dipende dalle azioni A e B, puoi modificare l'azione C e impostare il parametro
dependOnDependencyAssertionsin modo da impostare automaticamente tutte le asserzioni delle azioni A e B come dipendenze dell'azione C.Puoi impostare il parametro
dependOnDependencyAssertionsper le azioni dei seguenti tipi:tableviewoperations
Quando imposti il parametro dependOnDependencyAssertions e i parametri
includeDependentAssertions in un unico file, il parametro
includeDependentAssertions ha la priorità. Ad esempio, se imposti
dependOnDependencyAssertions su true, ma imposti anche
includeDependentAssertions su false per un'azione di dipendenza selezionata,
Dataform non aggiungerà le asserzioni di questa azione alle dipendenze.
Il seguente esempio di codice mostra i parametri dependOnDependencyAssertions e
includeDependentAssertions impostati nello stesso file di definizione della tabella:
// filename is tableName.sqlx
config {
type: "table",
dependOnDependencyAssertions: true,
dependencies: [ "actionA", {name: "actionB", includeDependentAssertions: false} ]
}
SELECT * FROM ${ref("actionC")}
Nell'esempio di codice precedente, Dataform aggiunge tutte le asserzioni dirette
di actionA e actionC alle dipendenze di tableName durante
la compilazione.
Imposta le asserzioni selezionate come dipendenze
Per eseguire un'azione del flusso di lavoro solo quando le asserzioni selezionate vengono superate, puoi aggiungere l'asserzione selezionata alla riga dependencies: [ "" ] nel blocco config dell'azione modificata.
Per impostare un'asserzione selezionata come dipendenza di un'azione del flusso di lavoro selezionata:
- Nell'area di lavoro di sviluppo, nel riquadro File, espandi
definitions/. - Seleziona un file SQLX di azione del workflow.
- Nel blocco
configdel file di azioni, inseriscidependencies: [ "" ]. All'interno di
dependencies: [ "" ], inserisci il nome dell'asserzione di azione o il nome file dell'asserzione manuale che vuoi impostare come dipendenza in uno dei seguenti formati:nonNullconfig { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_nonNull"] }Sostituisci quanto segue:
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
table,viewooperations. - ACTION_DATASET_NAME: il nome del set di dati in cui è definita l'azione. Il set di dati predefinito è definito nel file delle impostazioni del flusso di lavoro.
- ACTION_NAME: il nome dell'azione in cui è definita l'asserzione.
rowConditionsconfig { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_rowConditions"] }Sostituisci quanto segue:
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
table,viewooperations. - DATASET_NAME: il nome del set di dati in cui è definita l'azione. Il set di dati predefinito è definito nel file delle impostazioni del flusso di lavoro.
- ACTION_NAME: il nome dell'azione in cui è definita l'asserzione.
uniqueKeyconfig { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKey_INDEX"] }Sostituisci quanto segue:
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
table,viewooperations. - DATASET_NAME: il nome del set di dati in cui è definita la tabella. Il set di dati predefinito è definito nel file delle impostazioni del flusso di lavoro.
- ACTION_NAME: il nome della tabella in cui è definita l'asserzione.
- INDEX: l'indice dell'array di chiavi definito nell'asserzione
uniqueKeyche vuoi aggiungere come dipendenza, ad esempio0o1. Se nell'asserzione è definito un solo array di chiavi, l'indice è0.
uniqueKeysconfig { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKeys_INDEX"] }Sostituisci quanto segue:
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
table,viewooperations. - DATASET_NAME: il nome del set di dati in cui è definita la tabella. Il set di dati predefinito è definito nel file delle impostazioni del flusso di lavoro.
- ACTION_NAME: il nome della tabella in cui è definita l'asserzione.
- INDEX: l'indice dell'array di chiavi definito nell'asserzione
uniqueKeysche vuoi aggiungere come dipendenza, ad esempio0o1. Se nell'asserzione è definito un solo array di chiavi, l'indice è0.
asserzione manuale
config { type: "ACTION_TYPE", dependencies: [ "MANUAL_ASSERTION_NAME"] }Sostituisci quanto segue:
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
table,viewooperations. - MANUAL_ASSERTION_NAME il nome dell'asserzione manuale.
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
Per aggiungere un'altra asserzione come dipendenza alla tabella modificata, ripeti il passaggio 4.
(Facoltativo) Fai clic su Formato.
Il seguente esempio di codice mostra le asserzioni aggiunte alla tabella A, definita nel set di dati dataform:
config {
type: "table",
assertions: {
uniqueKey: ["user_id"],
nonNull: ["user_id", "customer_id"],
}
}
Il seguente esempio di codice mostra le asserzioni della tabella A aggiunte come dipendenze alla tabella B:
config {
type: "table",
dependencies: [ "dataform_A_assertions_uniqueKey_0", "dataform_A_assertions_nonNull"]
}
Il seguente esempio di codice mostra un'asserzione manuale definita nel file manualAssertion.sqlx e aggiunta come dipendenza a una visualizzazione:
config {
type: "view",
dependencies: [ "manualAssertion"]
}
Il seguente esempio di codice mostra il file manual_assertion e le
asserzioni della tabella sometable aggiunte come dipendenze a una tabella:
config {
type: "table",
dependencies: [ "manual_assertion", "dataform_sometable_assertions_nonNull" , "dataform_sometable_assertions_rowConditions"]
}
SELECT * FROM ${ref("referenced_table")} LEFT JOIN ...
Imposta le asserzioni di un'azione selezionata come dipendenze
Per eseguire un'azione del flusso di lavoro solo quando tutte le asserzioni dirette di un'azione di dipendenza selezionata vengono superate, imposta il parametro includeDependentAssertions su true nell'azione modificata. Dataform aggiunge automaticamente le asserzioni dirette dell'azione di dipendenza selezionata alle dipendenze durante la compilazione. Il valore predefinito è false.
Per impostare tutte le asserzioni di un'azione di dipendenza selezionata come dipendenze, segui questi passaggi:
- Nell'area di lavoro di sviluppo, nel riquadro File, espandi
definitions/. - Seleziona un file SQLX di azione del workflow.
Nel file, imposta il parametro
includeDependentAssertionssutruein uno dei seguenti modi:Nel blocco
configconfig { type: "ACTION_TYPE", dependencies: [{name: "dEPENDENCY_ACTION_NAME", includeDependentAssertions: true}] }Sostituisci quanto segue:
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
table,viewooperations. - DEPENDENCY_ACTION_NAME: il nome dell'azione di dipendenza con le asserzioni che vuoi impostare come dipendenze dell'azione modificata.
Nella dichiarazione
SELECTconfig { type: "ACTION_TYPE" } SELECT * FROM ${ref({name: "DEPENDENCY_ACTION_NAME", includeDependentAssertions: true})}Sostituisci quanto segue:
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
table,viewooperations. - DEPENDENCY_ACTION_NAME: il nome dell'azione di dipendenza con le asserzioni che vuoi impostare come dipendenze dell'azione modificata.
- ACTION_TYPE: il tipo di azione del flusso di lavoro:
(Facoltativo) Fai clic su Formato.
L'esempio di codice seguente mostra tableC, che dipende da viewA, tableB e da tutte le asserzioni di tableB:
// filename is tableC.sqlx
config {
type: "table",
dependencies: ["viewA", {name: "tableB", includeDependentAssertions: true}]
}
SELECT * FROM ...
Nell'esempio di codice precedente, Dataform aggiunge automaticamente tutte le
asserzioni dirette di tableB come dipendenze di tableC durante la compilazione.
Imposta le asserzioni di tutte le azioni di dipendenza come dipendenze
Per eseguire un'azione del flusso di lavoro solo quando tutte le asserzioni dirette di tutte
le azioni di dipendenza vengono superate, imposta il parametro dependOnDependencyAssertions
su true nell'azione modificata. Dataform aggiunge automaticamente le
asserzioni dirette delle azioni di dipendenza come dipendenze durante la compilazione. Il valore predefinito è false.
Quando imposti il parametro dependOnDependencyAssertions e i parametri
includeDependentAssertions in un unico file, il parametro
includeDependentAssertions ha la priorità per l'azione
di dipendenza per cui è impostato.
Per impostare tutte le asserzioni di un'azione di dipendenza selezionata come dipendenze, segui questi passaggi:
- Nell'area di lavoro di sviluppo, nel riquadro File, espandi
definitions/. - Seleziona un file SQLX di azione del workflow.
Nel file, imposta il parametro
dependOnDependencyAssertionssutruenel seguente formato:config { type: "ACTION_TYPE", dependOnDependencyAssertions: true, dependencies: [ "dependency1", "dependency2" ] }Sostituisci ACTION_TYPE: il tipo di azione del flusso di lavoro. I valori supportati includono
table,vieweoperations.(Facoltativo) Fai clic su Formato.
L'esempio di codice seguente mostra sometableE, che dipende da sometableA,
sometabletableB, sometableC, sometableD e da tutte le asserzioni dirette delle
tabelle delle dipendenze:
// filename is sometableE.sqlx
config {
type: "table",
dependOnDependencyAssertions: true,
dependencies: [ "sometableA", "sometableB" ]
}
SELECT * FROM ${ref("sometableC")}
SELECT * FROM ${ref("sometableD")}
Nell'esempio di codice precedente, Dataform aggiunge automaticamente tutte le
asserzioni dirette di sometableA, sometableB, sometableC e sometableD
come dipendenze di sometableE durante la compilazione.
Fare riferimento a una tabella con un nome tabella sottoposto a override
- Per fare riferimento a una tabella con un nome di tabella sottoposto a override, nella funzione
ref, inserisci il nome della tabella sottoposto a override impostato inname: "".
Il seguente esempio di codice fa riferimento a una tabella con un nome sostituito da
overridden_name:
SELECT * FROM ${ref("overridden_name")}
Per ulteriori informazioni sull'override dei nomi delle tabelle, vedi Override delle impostazioni della tabella.
Passaggi successivi
- Per scoprire come impostare le asserzioni come dipendenze, consulta Qualità dei dati di test.
- Per scoprire come dichiarare un'origine dati, consulta Dichiarare un'origine dati.
- Per scoprire come definire operazioni SQL personalizzate, consulta Creare operazioni.
- Per scoprire come riutilizzare il codice nel flusso di lavoro con gli include, consulta Riutilizzare il codice in un singolo repository con gli include.