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ängigen Vorgang festlegen. Wenn Sie einen benutzerdefinierten SQL-Vorgang als Abhängigkeit in der Funktionref
deklarieren möchten, müssen Sie die EigenschafthasOutput
in der SQLX-Definitionsdatei des benutzerdefinierten SQL-Vorgangs auftrue
festlegen .
- 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 deklarieren: Verwenden Sie die Dataform Core-Funktion
ref
, um in einerSELECT
-Anweisung auf die Abhängigkeit zu verweisen. - Deklarieren Sie eine Liste von Abhängigkeiten im Block
config
einer 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 some_table
-Tabellendefinition, die als Argument der ref
-Funktion in der custom_assertion.sqlx
-SQLX-Definitionsdatei 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 Workflow-Aktion B von der Workflow-Aktion 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 Behauptungen manuell als Abhängigkeiten für alle Aktionstypen außer Datenquellendeklarationen festlegen.
- Assertionen einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten festlegen
Sie können den Parameter
includeDependentAssertions
so 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
includeDependentAssertions
so festlegen, dass alle Zusicherungen der Aktion A automatisch als Abhängigkeiten der Aktion C festgelegt werden.Sie können den Parameter
includeDependentAssertions
für Aktionen der folgenden Typen festlegen:table
view
operations
- Die Zusicherungen aller abhängigen Aktionen als Abhängigkeiten festlegen
Mit dem Parameter
dependOnDependencyAssertions
können Sie festlegen, dass alle direkten Zusicherungen aus allen Abhängigkeitsaktionen der bearbeiteten Aktion automatisch als zusätzliche 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, können Sie die Aktion C bearbeiten und den Parameter
dependOnDependencyAssertions
so festlegen, dass alle Zusicherungen der Aktionen A und B automatisch als Abhängigkeiten der Aktion C festgelegt werden.Sie können den Parameter
dependOnDependencyAssertions
für Aktionen der folgenden Typen festlegen:table
view
operations
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 in der bearbeiteten Aktion in der dependencies: [ "" ]
-Zeile des config
-Blocks hinzufügen.
So legen Sie eine ausgewählte Behauptung als Abhängigkeit einer ausgewählten Workflow-Aktion fest:
- Maximieren Sie in Ihrem Entwicklerarbeitsbereich im Bereich Dateien das Symbol
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, und zwar in einem der folgenden Formate:nonNull
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_nonNull"] }
Ersetzen Sie Folgendes:
- ACTION_TYPE: Der Typ der Workflow-Aktion:
table
,view
oderoperations
. - 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.
rowConditions
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_rowConditions"] }
Ersetzen Sie Folgendes:
- ACTION_TYPE: Der Typ der Workflow-Aktion:
table
,view
oderoperations
. - 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.
uniqueKey
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKey_INDEX"] }
Ersetzen Sie Folgendes:
- ACTION_TYPE: Der Typ der Workflow-Aktion:
table
,view
oderoperations
. - 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 und die Sie als Abhängigkeit hinzufügen möchten, z. B.0
oder1
. Wenn in der Assertion nur ein Schlüssel-Array definiert ist, ist der Index0
.
uniqueKeys
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKeys_INDEX"] }
Ersetzen Sie Folgendes:
- ACTION_TYPE: Der Typ der Workflow-Aktion:
table
,view
oderoperations
. - 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 und die Sie als Abhängigkeit hinzufügen möchten, z. B.0
oder1
. 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
,view
oderoperations
. - MANUAL_ASSERTION_NAME ist der Name der manuellen Behauptung.
- 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 Entwicklerarbeitsbereich im Bereich Dateien das Symbol
definitions/
. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
Legen Sie in der Datei den Parameter
includeDependentAssertions
auftrue
fest. Das geht auf eine der folgenden Arten:Im Block
config
config { type: "ACTION_TYPE", dependencies: [{name: "dEPENDENCY_ACTION_NAME", includeDependentAssertions: true}] }
Ersetzen Sie Folgendes:
- ACTION_TYPE: Der Typ der Workflow-Aktion:
table
,view
oderoperations
. - 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
,view
oderoperations
. - 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 eine Workflow-Aktion nur ausgeführt werden soll, 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 Entwicklerarbeitsbereich im Bereich Dateien das Symbol
definitions/
. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
Legen Sie in der Datei den Parameter
dependOnDependencyAssertions
auftrue
fest. Verwenden Sie dazu das folgende Format:config { type: "ACTION_TYPE", dependOnDependencyAssertions: true, dependencies: [ "dependency1", "dependency2" ] }
Ersetzen Sie ACTION_TYPE durch den Typ der Workflowaktion. Unterstützte Werte sind
table
,view
undoperations
.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
ref
auf 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.