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. In einer Abhängigkeitsbeziehung hängt die Ausführung des abhängigen Objekts von der Ausführung des Abhängigkeitsobjekts ab. Das bedeutet, dass Dataform die abhängige Aufgabe nach der Abhängigkeit 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 Workflowaktionen definieren:
- Deklarationen von Datenquellen
- Deklarationen von BigQuery-Datenquellen, mit denen Sie in Dataform-Tabellendefinitionen und SQL-Vorgängen auf diese Datenquellen verweisen können. Sie können eine Datenquelldeklaration als Abhängigkeit, aber nicht als abhängige Variable festlegen.
- Tables
- 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ängige Tabelle festlegen.
- Benutzerdefinierte SQL-Vorgänge
- SQL-Anweisungen, die von Dataform unverändert in BigQuery ausgeführt werden. Sie können einen benutzerdefinierten SQL-Vorgang, der in einer
type: operations-Datei definiert ist, als Abhängigkeit und als abhängiges Element festlegen. Wenn Sie einen benutzerdefinierten SQL-Vorgang als Abhängigkeit in der Funktionrefdeklarieren möchten, müssen Sie die EigenschafthasOutputin der SQLX-Definitionsdatei des benutzerdefinierten SQL-Vorgangs auftruefestlegen .
- Zusicherungen
- 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 in einer
type: assertion-Datei definierte Assertion als Abhängigkeit und als abhängige Assertion festlegen, indem Sie Abhängigkeiten imconfig-Block deklarieren.
Sie können die Abhängigkeitsbeziehung auf folgende Weise definieren:
- Abhängigkeit mit der Dataform Core-Funktion
refdeklarieren, um in einerSELECT-Anweisung auf die Abhängigkeit zu verweisen: - Deklarieren Sie eine Liste von Abhängigkeiten im Block
configeiner SQLX-Definitionsdatei.
Hinweise
- Entwicklungsarbeitsbereich in Ihrem Repository erstellen und initialisieren
- Optional: Datenquelle deklarieren.
- Erstellen Sie mindestens zwei Workflowaktionen: Tabellen, Zusicherungen, Datenquellen-Deklarationen oder Vorgänge.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dataform Editor (roles/dataform.editor) für Arbeitsbereiche zuzuweisen, damit Sie die Berechtigungen erhalten, die Sie zum Deklarieren von Abhängigkeiten für Tabellen, Zusicherungen, Datenquellendeklarationen und benutzerdefinierten SQL-Vorgängen 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.
Eine 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 ref-Funktion hinzu.
Die Funktion ref ist eine integrierte Dataform Core-Funktion, mit der Sie in Ihrem Workflow auf jede Tabelle, Datenquellendeklaration oder benutzerdefinierte SQL-Operation verweisen und automatisch davon abhängig sein können, wenn die Eigenschaft hasOutput auf true festgelegt ist.
Weitere Informationen zur ref-Funktion finden Sie in der Referenz zu Dataform Core-Kontextmethoden.
Weitere Informationen zur Verwendung der Funktion ref in einer Tabellendefinition finden Sie unter Tabellendefinitionen.
Das folgende Codebeispiel zeigt die source_data-Datenquellendeklaration, 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.
Im folgenden Codebeispiel sehen Sie die SQLX-Datei für die Tabellendefinition some_table, 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 wird zuerst some_table und dann custom_assertion ausgeführt, sobald some_table erstellt wurde.
Abhängigkeiten im config-Block deklarieren
So deklarieren Sie Abhängigkeiten, auf die in der SQL-Anweisungsdefinition der abhängigen Tabelle, Assertion oder benutzerdefinierten SQL-Operation nicht verwiesen wird, die aber vor der Tabelle, Assertion oder benutzerdefinierten SQL-Operation ausgeführt werden müssen:
- Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis
definitions/. - Wählen Sie die SQLX-Datei mit der Tabelle, Assertion oder benutzerdefinierten SQL-Operation aus, die Sie bearbeiten möchten.
Geben Sie im
config-Block der Datei das folgende Code-Snippet ein:dependencies: [ "DEPENDENCY", ]Ersetzen Sie DEPENDENCY durch den String „target“, 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.
Im folgenden Codebeispiel werden die Tabelle some_table und die some_assertion-Assertion als Abhängigkeiten dem config-Block einer Tabellendefinitionsdatei hinzugefügt:
config { dependencies: [ "some_table", "some_assertion" ] }
Assertionen als Abhängigkeiten festlegen
Wenn die Workflowaktion B von der Workflowaktion A mit Zusicherungen abhängt, wird die Ausführung der Aktion B durch das Fehlschlagen der Zusicherungen der Aktion A nicht blockiert. Wenn Sie die Aktion B nur ausführen möchten, wenn die Zusicherungen der Aktion A erfüllt sind, müssen Sie die Zusicherungen der Aktion A als Abhängigkeiten der Aktion B festlegen.
Sie haben folgende Möglichkeiten, Zusicherungen als Abhängigkeiten einer ausgewählten Aktion festzulegen:
- Ausgewählte Behauptungen als Abhängigkeiten festlegen
Sie können ausgewählte Zusicherungen manuell als Abhängigkeiten festlegen, indem Sie sie der
dependencies: [ "" ]-Zeile imconfig-Block der bearbeiteten Aktion hinzufügen.Wenn beispielsweise die Aktion B von der Aktion A abhängt und Sie möchten, dass die Aktion B nur von den ausgewählten Zusicherungen der Aktion A abhängt, können Sie diese ausgewählten Zusicherungen dem
config-Block der Aktion B hinzufügen.Sie können ausgewählte Zusicherungen manuell als Abhängigkeiten für alle Aktionstypen festlegen, mit Ausnahme von Datenquellendeklarationen.
- Assertionen einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten festlegen
Sie können den Parameter
includeDependentAssertionsso festlegen, dass alle direkten Zusicherungen einer ausgewählten Workflow-Aktion für Abhängigkeiten automatisch als Abhängigkeiten der bearbeiteten Aktion festgelegt werden. Dataform fügt diese Zusicherungen 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 Zusicherungen der Abhängigkeitsaktion ändern.Wenn die Aktion C beispielsweise von den Aktionen A und B abhängt, Sie aber nur möchten, dass die Aktion C von den Zusicherungen der Aktion A abhängt, können Sie die Aktion C bearbeiten und den Parameter
includeDependentAssertionsso festlegen, dass alle Zusicherungen der Aktion A automatisch als Abhängigkeiten der Aktion C festgelegt werden.Sie können den Parameter
includeDependentAssertionsfür Aktionen der folgenden Typen festlegen:tableviewoperations
- Die Zusicherungen aller abhängigen Aktionen als Abhängigkeiten festlegen
Mit dem Parameter
dependOnDependencyAssertionskönnen Sie alle direkten Zusicherungen aus allen Abhängigkeitsaktionen der bearbeiteten Aktion automatisch als zusätzliche Abhängigkeiten der bearbeiteten Aktion festlegen. Dataform fügt diese Zusicherungen 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 Zusicherungen der Abhängigkeitsaktion ändern.Wenn die Aktion C beispielsweise von den Aktionen A und B abhängt, können Sie die Aktion C bearbeiten und den Parameter
dependOnDependencyAssertionsso festlegen, dass alle Zusicherungen der Aktionen A und B automatisch als Abhängigkeiten der Aktion C festgelegt werden.Sie können den Parameter
dependOnDependencyAssertionsfür Aktionen der folgenden Typen festlegen:tableviewoperations
Wenn Sie den Parameter dependOnDependencyAssertions und die Parameter includeDependentAssertions in einer einzigen Datei festlegen, hat der Parameter includeDependentAssertions Vorrang. Wenn Sie beispielsweise dependOnDependencyAssertions auf true festlegen, aber auch includeDependentAssertions auf false für eine ausgewählte Abhängigkeitsaktion, fügt Dataform die Assertions dieser Aktion nicht den Abhängigkeiten hinzu.
Im folgenden Codebeispiel sehen Sie 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 während der Kompilierung alle direkten Zusicherungen von actionA und actionC den Abhängigkeiten von tableName hinzu.
Ausgewählte Behauptungen als Abhängigkeiten festlegen
Wenn Sie eine Workflow-Aktion nur ausführen möchten, wenn ausgewählte Zusicherungen erfüllt sind, können Sie die ausgewählte Zusicherung der dependencies: [ "" ]-Zeile im config-Block der bearbeiteten Aktion hinzufügen.
So legen Sie eine ausgewählte Behauptung als Abhängigkeit einer ausgewählten Workflow-Aktion fest:
- Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien
definitions/. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
- Geben Sie im
config-Block der Aktionsdateidependencies: [ "" ]ein. Geben Sie in
dependencies: [ "" ]den Namen der Aktionsbehauptung oder den Dateinamen der manuellen Behauptung ein, die Sie als Abhängigkeit festlegen möchten. Verwenden Sie dazu eines der folgenden Formate: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, die in der
uniqueKey-Assertion definiert sind, die Sie als Abhängigkeit hinzufügen möchten, z. B.0oder1. Wenn in der Assertion nur ein Schlüssel-Array 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, die in der
uniqueKeys-Assertion definiert sind, die Sie als Abhängigkeit hinzufügen möchten, z. B.0oder1. Wenn in der Assertion nur ein Schlüssel-Array 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 ist der Name der manuellen Assertion.
- ACTION_TYPE: Der Typ der Workflow-Aktion:
Wenn Sie der bearbeiteten Tabelle eine weitere Behauptung als Abhängigkeit hinzufügen möchten, wiederholen Sie Schritt 4.
Optional: Klicken Sie auf Formatieren.
Im folgenden Codebeispiel sehen Sie Zusicherungen, die der Tabelle A hinzugefügt wurden. Diese Tabelle ist im Dataset dataform definiert:
config {
type: "table",
assertions: {
uniqueKey: ["user_id"],
nonNull: ["user_id", "customer_id"],
}
}
Im folgenden Codebeispiel werden Zusicherungen für Tabelle A als Abhängigkeiten für Tabelle B hinzugefügt:
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 einer Ansicht als Abhängigkeit hinzugefügt wird:
config {
type: "view",
dependencies: [ "manualAssertion"]
}
Im folgenden Codebeispiel sehen Sie die Datei manual_assertion und die Zusicherungen der Tabelle sometable, die einer Tabelle als Abhängigkeiten 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 Workflowaktion nur ausgeführt werden soll, wenn alle direkten Zusicherungen einer ausgewählten Abhängigkeitsaktion erfüllt sind, legen Sie den Parameter includeDependentAssertions in der bearbeiteten Aktion auf true fest. Dataform fügt die direkten Zusicherungen der ausgewählten Abhängigkeitsaktion während der Kompilierung automatisch den Abhängigkeiten hinzu. Der Standardwert ist false.
So legen Sie alle Assertions einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten fest:
- Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien
definitions/. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
Legen Sie in der Datei den Parameter
includeDependentAssertionsauftruefest. Das geht auf eine der folgenden Arten: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 Zusicherungen, 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 Zusicherungen, 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, das von viewA, tableB und allen Zusicherungen 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 während der Kompilierung automatisch alle direkten Zusicherungen von tableB als Abhängigkeiten zu tableC hinzu.
Die Zusicherungen aller Abhängigkeitsaktionen als Abhängigkeiten festlegen
Wenn Sie eine Workflow-Aktion nur ausführen möchten, wenn alle direkten Zusicherungen aller Abhängigkeitsaktionen erfolgreich sind, legen Sie den Parameter dependOnDependencyAssertions in der bearbeiteten Aktion auf true fest. Dataform fügt die direkten Zusicherungen der Abhängigkeitsaktionen während der Kompilierung automatisch als Abhängigkeiten hinzu. Der Standardwert ist false.
Wenn Sie den Parameter dependOnDependencyAssertions und die Parameter includeDependentAssertions in einer einzelnen Datei festlegen, hat der Parameter includeDependentAssertions für die Abhängigkeitsaktion, für die er festgelegt ist, Vorrang.
So legen Sie alle Assertions einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten fest:
- Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien
definitions/. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
Legen Sie in der Datei den Parameter
dependOnDependencyAssertionsim folgenden Format auftruefest:config { type: "ACTION_TYPE", dependOnDependencyAssertions: true, dependencies: [ "dependency1", "dependency2" ] }Ersetzen Sie ACTION_TYPE durch den Typ der Workflowaktion. Unterstützte Werte sind
table,viewundoperations.Optional: Klicken Sie auf Formatieren.
Das folgende Codebeispiel zeigt sometableE, das von sometableA, sometabletableB, sometableC, sometableD und allen direkten Zusicherungen 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 während der Kompilierung automatisch alle direkten Zusicherungen von sometableA, sometableB, sometableC und sometableD als Abhängigkeiten zu sometableE hinzu.
Auf eine Tabelle mit einem überschriebenen Tabellennamen verweisen
- Wenn Sie in der Funktion
refauf eine Tabelle mit einem überschriebenen Tabellennamen verweisen möchten, geben Sie den überschriebenen Tabellennamen ein, der inname: ""festgelegt ist.
Im folgenden Codebeispiel wird auf eine Tabelle verwiesen, deren Name in overridden_name geändert wurde:
SELECT * FROM ${ref("overridden_name")}
Weitere Informationen zum Überschreiben von Tabellennamen finden Sie unter Tabelleneinstellungen überschreiben.
Nächste Schritte
- Informationen dazu, wie Sie Zusicherungen als Abhängigkeiten festlegen, 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.