In diesem Dokument wird beschrieben, wie Sie die Beziehung zwischen Objekten in Ihrem Workflow in Dataform definieren, indem Sie Abhängigkeiten deklarieren.
Sie können eine Abhängigkeitsbeziehung zwischen Objekten eines Workflows definieren. Bei einer Abhängigkeitsbeziehung hängt die Ausführung des abhängigen Objekts von der Ausführung des Abhängigkeitsobjekts ab. Das bedeutet, dass Dataform das abhängige Objekt nach dem Abhängigkeitsobjekt ausführt. Sie definieren die Beziehung, indem Sie Abhängigkeiten in der SQLX-Definitionsdatei des abhängigen Objekts deklarieren.
Die Abhängigkeitsdeklarationen bilden einen Abhängigkeitsbaum Ihres Workflows, der die Reihenfolge bestimmt, in der Dataform Ihre Workflow-Aktionen ausführt.
Sie können die Abhängigkeitsbeziehung zwischen den folgenden Workflow-Aktionen definieren:
- Datenquellendeklarationen
- Deklarationen von BigQuery-Datenquellen, mit denen Sie in Dataform-Tabellendefinitionen und SQL-Vorgängen auf diese Datenquellen verweisen können. Sie können eine Datenquellendeklaration als Abhängigkeit, aber nicht als abhängiges Objekt festlegen.
- Tabellen
- Tabellen, die Sie in Dataform basierend auf den deklarierten Datenquellen oder anderen Tabellen in Ihrem Workflow erstellen. Dataform unterstützt die folgenden Tabellentypen: Tabelle, inkrementelle Tabelle, Ansicht und materialisierte Ansicht. Sie können eine Tabelle als Abhängigkeit und als abhängiges Objekt festlegen.
- Benutzerdefinierte SQL-Vorgänge
- SQL-Anweisungen, die Dataform unverändert in BigQuery ausführt. Sie können einen benutzerdefinierten SQL-Vorgang, der in einer
type: operations-Datei definiert ist, als Abhängigkeit und als abhängiges Objekt festlegen. Wenn Sie einen benutzerdefinierten SQL-Vorgang in der Funktionrefals Abhängigkeit deklarieren möchten, müssen Sie in der SQLX-Definitionsdatei des benutzerdefinierten SQL-Vorgangs die EigenschafthasOutputauftruesetzen. - Assertionen
- Abfragen für Datenqualitätstests, mit denen Sie Tabellendaten testen können.
Dataform führt Assertionen jedes Mal aus, wenn der Workflow aktualisiert wird, und benachrichtigt Sie, wenn eine Assertion fehlschlägt. Sie können eine Assertion, die in einer
type: assertion-Datei definiert ist, als Abhängigkeit und als abhängiges Objekt festlegen, indem Sie Abhängigkeiten im Blockconfigdeklarieren.
Sie können die Abhängigkeitsbeziehung auf folgende Weise definieren:
- Deklarieren Sie eine Abhängigkeit, indem Sie mit der Dataform-Kernfunktion
refauf die Abhängigkeit in einerSELECT-Anweisung verweisen. - Deklarieren Sie eine Liste von Abhängigkeiten im Block
configeiner SQLX-Definitionsdatei.
Hinweis
- Erstellen und initialisieren Sie einen Entwicklungsarbeitsbereich in Ihrem Repository.
- Optional: Deklarieren Sie eine Datenquelle.
- Erstellen Sie mindestens zwei Workflow-Aktionen: Tabellen, Assertionen, Datenquellendeklarationen, oder Vorgänge.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen für Arbeitsbereiche die IAM-Rolle Dataform Editor (roles/dataform.editor) zuzuweisen, damit Sie die Berechtigungen erhalten, die Sie zum Deklarieren von Abhängigkeiten für Tabellen, Assertionen, Datenquellendeklarationen und benutzerdefinierte SQL-Vorgänge benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Abhängigkeit als Argument der Funktion ref deklarieren
Wenn Sie in einer SELECT-Anweisung auf eine Abhängigkeit verweisen und sie automatisch deklarieren möchten, fügen Sie die Abhängigkeit als Argument der Funktion ref hinzu.
Die Funktion ref ist eine integrierte Dataform-Kernfunktion, mit der Sie auf jede Tabelle, Datenquellendeklaration oder jeden benutzerdefinierten SQL-Vorgang mit der Eigenschaft hasOutput verweisen und automatisch davon abhängig sein können, die auf true gesetzt ist.
Weitere Informationen zur ref Funktion finden Sie unter
Referenz zu Dataform-Kernkontextmethoden.
Weitere Informationen zur Verwendung der Funktion ref in einer Tabellendefinition finden Sie unter
Tabellendefinitionen.
Das folgende Codebeispiel zeigt die Datenquellendeklaration source_data, die als Argument der Funktion ref in der SQLX-Definitionsdatei incremental_table.sqlx einer inkrementellen Tabelle hinzugefügt wurde:
// filename is incremental_table.sqlx
config { type: "incremental" }
SELECT * FROM ${ref("source_data")}
Im vorherigen Codebeispiel wird source_data automatisch als Abhängigkeit von incremental_table deklariert.
Das folgende Codebeispiel zeigt die SQLX-Datei some_table der Tabellendefinition, die als Argument der Funktion ref in der SQLX-Definitionsdatei custom_assertion.sqlx einer Assertion hinzugefügt wurde:
// 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
Im vorherigen Codebeispiel wird some_table automatisch als Abhängigkeit von custom_assertion deklariert. Während der Ausführung führt Dataform zuerst some_table und dann custom_assertion aus, sobald some_table erstellt wurde.
Abhängigkeiten im Block config deklarieren
So deklarieren Sie Abhängigkeiten, auf die in der SQL-Anweisungsdefinition des abhängigen Objekts nicht verwiesen wird, die aber vor der Tabelle, Assertion oder dem benutzerdefinierten SQL-Vorgang ausgeführt werden müssen:
- Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis
definitions/. - Wählen Sie die SQLX-Datei der Tabelle, Assertion oder des benutzerdefinierten SQL-Vorgangs aus, die Sie bearbeiten möchten.
Geben Sie im Block
configder Datei das folgende Code-Snippet ein:dependencies: [ "DEPENDENCY", ]Ersetzen Sie DEPENDENCY durch das Zielstring, z. B. den Dateinamen der Aktion, die Sie als Abhängigkeit hinzufügen möchten. Sie können mehrere Ziele durch Kommas getrennt eingeben.
Optional: Klicken Sie auf Formatieren.
Das folgende Codebeispiel zeigt die Tabelle some_table und die Assertion some_assertion, die als Abhängigkeiten zum Block config einer Tabellendefinitionsdatei hinzugefügt wurden:
config { dependencies: [ "some_table", "some_assertion" ] }
Assertionen als Abhängigkeiten festlegen
Wenn Workflow-Aktion B von Workflow-Aktion A abhängt, die Assertionen enthält, wird die Ausführung von Aktion B durch das Fehlschlagen der Assertionen von Aktion A nicht blockiert. Wenn Aktion B nur ausgeführt werden soll, wenn die Assertionen von Aktion A erfolgreich sind, müssen Sie die Assertionen von Aktion A als Abhängigkeiten von Aktion B festlegen.
Sie können Assertionen auf folgende Weise als Abhängigkeiten einer ausgewählten Aktion festlegen:
- Ausgewählte Assertionen als Abhängigkeiten festlegen
Sie können ausgewählte Assertionen manuell als Abhängigkeiten festlegen, indem Sie sie hinzufügen zur Zeile
dependencies: [ "" ]im Blockconfigder bearbeiteten Aktion.Wenn beispielsweise Aktion B von Aktion A abhängt und Aktion B nur von den ausgewählten Assertionen von Aktion A abhängen soll, können Sie diese ausgewählten Assertionen dem
configBlock von Aktion B hinzufügen.Sie können ausgewählte Assertionen für alle Aktionstypen außer Datenquellendeklarationen manuell als Abhängigkeiten festlegen.
- Assertionen einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten festlegen
Sie können den Parameter
includeDependentAssertionsfestlegen, um automatisch alle direkten Assertionen einer ausgewählten Abhängigkeits-Workflow-Aktion als Abhängigkeiten der bearbeiteten Aktion festzulegen. Dataform fügt diese Assertionen bei jeder Kompilierung der Aktion als Abhängigkeiten hinzu, um zu prüfen, ob die Abhängigkeiten auf dem neuesten Stand sind, wenn sich die Assertionen der Abhängigkeitsaktion ändern.Wenn beispielsweise Aktion C von den Aktionen A und B abhängt, Sie aber möchten, dass Aktion C nur von den Assertionen von Aktion A abhängt, können Sie Aktion C bearbeiten und den Parameter
includeDependentAssertionsfestlegen, um automatisch alle Assertionen von Aktion A als Abhängigkeiten von Aktion C festzulegen.Sie können den Parameter
includeDependentAssertionsfür Aktionen der folgenden Typen festlegen:tableviewoperations
- Assertionen aller Abhängigkeitsaktionen als Abhängigkeiten festlegen
Sie können den Parameter
dependOnDependencyAssertionsfestlegen, um automatisch alle direkten Assertionen aus allen Abhängigkeitsaktionen der bearbeiteten Aktion als zusätzliche Abhängigkeiten der bearbeiteten Aktion festzulegen. Dataform fügt diese Assertionen bei jeder Kompilierung der Aktion als Abhängigkeiten hinzu, um zu prüfen, ob die Abhängigkeiten auf dem neuesten Stand sind, wenn sich die Assertionen der Abhängigkeitsaktion ändern.Wenn beispielsweise Aktion C von den Aktionen A und B abhängt, können Sie Aktion C bearbeiten und den
dependOnDependencyAssertionsParameter festlegen, um automatisch alle Assertionen der Aktionen A und B als Abhängigkeiten von Aktion C festzulegen.Sie können den Parameter
dependOnDependencyAssertionsfür Aktionen der folgenden Typen festlegen:tableviewoperations
Wenn Sie die Parameter dependOnDependencyAssertions und includeDependentAssertions in einer einzigen Datei festlegen, hat der Parameter includeDependentAssertions Vorrang. Wenn Sie beispielsweise dependOnDependencyAssertions auf true setzen, aber auch includeDependentAssertions für eine ausgewählte Abhängigkeitsaktion auf false setzen, fügt Dataform die Assertionen dieser Aktion nicht den Abhängigkeiten hinzu.
Das folgende Codebeispiel zeigt die Parameter dependOnDependencyAssertions und includeDependentAssertions, die in derselben Tabellendefinitionsdatei festgelegt sind:
// filename is tableName.sqlx
config {
type: "table",
dependOnDependencyAssertions: true,
dependencies: [ "actionA", {name: "actionB", includeDependentAssertions: false} ]
}
SELECT * FROM ${ref("actionC")}
Im vorherigen Codebeispiel fügt Dataform bei der Kompilierung alle direkten Assertionen von actionA und actionC zu den Abhängigkeiten von tableName hinzu.
Ausgewählte Assertionen als Abhängigkeiten festlegen
Wenn eine Workflow-Aktion nur ausgeführt werden soll, wenn ausgewählte Assertionen erfolgreich sind, können Sie die
ausgewählte Assertion der dependencies: [ "" ] Zeile im config Block der
bearbeiteten Aktion hinzufügen.
So legen Sie eine ausgewählte Assertion als Abhängigkeit einer ausgewählten Workflow-Aktion fest:
- Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis
definitions/. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
- Geben Sie im
configBlock der Aktionsdateidependencies: [ "" ]ein. Geben Sie in
dependencies: [ "" ]den Namen der Aktionsassertion oder den Dateinamen der manuellen Assertion, die Sie als Abhängigkeit festlegen möchten, in einem der folgenden Formate ein:nonNullconfig { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_nonNull"] }Ersetzen Sie Folgendes:
- ACTION_TYPE: der Typ der Workflow-Aktion:
table,viewoderoperations. - ACTION_DATASET_NAME: der Name des Datasets, in dem die Aktion definiert ist. Das Standard-Dataset ist in der Datei mit den Workflow-Einstellungen definiert.
- ACTION_NAME: der Name der Aktion, in der die Assertion definiert ist.
rowConditionsconfig { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_rowConditions"] }Ersetzen Sie Folgendes:
- ACTION_TYPE: der Typ der Workflow-Aktion:
table,viewoderoperations. - DATASET_NAME: der Name des Datasets, in dem die Aktion definiert ist. Das Standard-Dataset ist in der Datei mit den Workflow-Einstellungen definiert.
- ACTION_NAME: der Name der Aktion, in der die Assertion definiert ist.
uniqueKeyconfig { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKey_INDEX"] }Ersetzen Sie Folgendes:
- ACTION_TYPE: der Typ der Workflow-Aktion:
table,viewoderoperations. - DATASET_NAME: der Name des Datasets, in dem die Tabelle definiert ist. Das Standard-Dataset ist in der Datei mit den Workflow-Einstellungen definiert.
- ACTION_NAME: der Name der Tabelle, in der die Assertion definiert ist.
- INDEX: der Index des Arrays von Schlüsseln, das in der
uniqueKeyAssertion definiert ist und das Sie als Abhängigkeit hinzufügen möchten, z. B.0oder1. Wenn in der Assertion nur ein Array von Schlüsseln definiert ist, ist der Index0.
uniqueKeysconfig { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKeys_INDEX"] }Ersetzen Sie Folgendes:
- ACTION_TYPE: der Typ der Workflow-Aktion:
table,viewoderoperations. - DATASET_NAME: der Name des Datasets, in dem die Tabelle definiert ist. Das Standard-Dataset ist in der Datei mit den Workflow-Einstellungen definiert.
- ACTION_NAME: der Name der Tabelle, in der die Assertion definiert ist.
- INDEX: der Index des Arrays von Schlüsseln, das in der
uniqueKeysAssertion definiert ist und das Sie als Abhängigkeit hinzufügen möchten, z. B.0oder1. Wenn in der Assertion nur ein Array von Schlüsseln definiert ist, ist der Index0.
Manuelle Assertion
config { type: "ACTION_TYPE", dependencies: [ "MANUAL_ASSERTION_NAME"] }Ersetzen Sie Folgendes:
- ACTION_TYPE: der Typ der Workflow-Aktion:
table,viewoderoperations. - MANUAL_ASSERTION_NAME: der Name der manuellen Assertion.
- ACTION_TYPE: der Typ der Workflow-Aktion:
Wenn Sie der bearbeiteten Tabelle eine weitere Assertion als Abhängigkeit hinzufügen möchten, wiederholen Sie Schritt 4.
Optional: Klicken Sie auf Formatieren.
Das folgende Codebeispiel zeigt Assertionen, die der Tabelle A hinzugefügt wurden, die
im dataform Dataset definiert ist:
config {
type: "table",
assertions: {
uniqueKey: ["user_id"],
nonNull: ["user_id", "customer_id"],
}
}
Das folgende Codebeispiel zeigt Assertionen für Tabelle A, die als Abhängigkeiten für Tabelle B hinzugefügt wurden:
config {
type: "table",
dependencies: [ "dataform_A_assertions_uniqueKey_0", "dataform_A_assertions_nonNull"]
}
Das folgende Codebeispiel zeigt eine manuelle Assertion, die in der Datei manualAssertion.sqlx definiert und als Abhängigkeit zu einer Ansicht hinzugefügt wurde:
config {
type: "view",
dependencies: [ "manualAssertion"]
}
Das folgende Codebeispiel zeigt die Datei manual_assertion und die Assertionen der Tabelle sometable, die als Abhängigkeiten zu einer Tabelle hinzugefügt wurden:
config {
type: "table",
dependencies: [ "manual_assertion", "dataform_sometable_assertions_nonNull" , "dataform_sometable_assertions_rowConditions"]
}
SELECT * FROM ${ref("referenced_table")} LEFT JOIN ...
Assertionen einer ausgewählten Aktion als Abhängigkeiten festlegen
Wenn eine Workflow-Aktion nur ausgeführt werden soll, wenn alle direkten Assertionen einer ausgewählten Abhängigkeitsaktion erfolgreich sind, setzen Sie den Parameter includeDependentAssertions in der bearbeiteten Aktion auf true. Dataform fügt die direkten Assertionen der ausgewählten Abhängigkeitsaktion bei der Kompilierung automatisch den Abhängigkeiten hinzu. Der Standardwert ist false.
So legen Sie alle Assertionen einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten fest:
- Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis
definitions/. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
Setzen Sie in der Datei den Parameter
includeDependentAssertionsauftrue. Sie haben dazu folgende Möglichkeiten:Im Block
configconfig { type: "ACTION_TYPE", dependencies: [{name: "dEPENDENCY_ACTION_NAME", includeDependentAssertions: true}] }Ersetzen Sie Folgendes:
- ACTION_TYPE: der Typ der Workflow-Aktion:
table,viewoderoperations. - DEPENDENCY_ACTION_NAME: der Name der Abhängigkeitsaktion mit den Assertionen, die Sie als Abhängigkeiten der bearbeiteten Aktion festlegen möchten.
In der
SELECT-Anweisungconfig { type: "ACTION_TYPE" } SELECT * FROM ${ref({name: "DEPENDENCY_ACTION_NAME", includeDependentAssertions: true})}Ersetzen Sie Folgendes:
- ACTION_TYPE: der Typ der Workflow-Aktion:
table,viewoderoperations. - DEPENDENCY_ACTION_NAME: der Name der Abhängigkeitsaktion mit den Assertionen, die Sie als Abhängigkeiten der bearbeiteten Aktion festlegen möchten.
- ACTION_TYPE: der Typ der Workflow-Aktion:
Optional: Klicken Sie auf Formatieren.
Das folgende Codebeispiel zeigt tableC, die von viewA, tableB und allen Assertionen von tableB abhängt:
// filename is tableC.sqlx
config {
type: "table",
dependencies: ["viewA", {name: "tableB", includeDependentAssertions: true}]
}
SELECT * FROM ...
Im vorherigen Codebeispiel fügt Dataform bei der Kompilierung automatisch alle direkten Assertionen von tableB als Abhängigkeiten zu tableC hinzu.
Assertionen aller Abhängigkeitsaktionen als Abhängigkeiten festlegen
Wenn eine Workflow-Aktion nur ausgeführt werden soll, wenn alle direkten Assertionen aller Abhängigkeitsaktionen erfolgreich sind, setzen Sie den Parameter dependOnDependencyAssertions in der bearbeiteten Aktion auf true. Dataform fügt die direkten Assertionen der Abhängigkeitsaktionen bei der Kompilierung automatisch als Abhängigkeiten hinzu. Der Standardwert ist false.
Wenn Sie die Parameter dependOnDependencyAssertions und includeDependentAssertions in einer einzigen Datei festlegen, hat der Parameter includeDependentAssertions für die Abhängigkeitsaktion, für die er festgelegt ist, Vorrang.
So legen Sie alle Assertionen einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten fest:
- Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis
definitions/. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
Setzen Sie in der Datei den Parameter
dependOnDependencyAssertionsim folgenden Format auftrue:config { type: "ACTION_TYPE", dependOnDependencyAssertions: true, dependencies: [ "dependency1", "dependency2" ] }Ersetzen Sie ACTION_TYPE durch den Typ der Workflow-Aktion. Unterstützte Werte sind
table,viewundoperations.Optional: Klicken Sie auf Formatieren.
Das folgende Codebeispiel zeigt sometableE, die von sometableA, sometableB, sometableC, sometableD und allen direkten Assertionen der Abhängigkeitstabellen abhängt:
// filename is sometableE.sqlx
config {
type: "table",
dependOnDependencyAssertions: true,
dependencies: [ "sometableA", "sometableB" ]
}
SELECT * FROM ${ref("sometableC")}
SELECT * FROM ${ref("sometableD")}
Im vorherigen Codebeispiel fügt Dataform bei der Kompilierung automatisch alle direkten Assertionen von sometableA, sometableB, sometableC und sometableD als Abhängigkeiten zu sometableE hinzu.
Auf eine Tabelle mit einem überschriebenen Tabellennamen verweisen
- Wenn Sie auf eine Tabelle mit einem überschriebenen Tabellennamen verweisen möchten, geben Sie in der
refFunktion, den überschriebenen Tabellennamen ein, der inname: ""festgelegt ist.
Das folgende Codebeispiel verweist auf eine Tabelle, deren Name in overridden_name überschrieben wurde:
SELECT * FROM ${ref("overridden_name")}
Weitere Informationen zum Überschreiben von Tabellennamen, siehe Tabelleneinstellungen überschreiben.
Nächste Schritte
- Informationen zum Festlegen von Assertionen als Abhängigkeiten finden Sie unter Datenqualität testen.
- Informationen zum Deklarieren einer Datenquelle finden Sie unter Datenquelle deklarieren.
- Informationen zum Definieren benutzerdefinierter SQL-Vorgänge finden Sie unter Vorgänge erstellen.
- Informationen zum Wiederverwenden von Code in Ihrem Workflow mit Includes finden Sie unter Code in einem einzelnen Repository mit Includes wiederverwenden.