Abhängigkeiten festlegen

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 Funktion ref als Abhängigkeit deklarieren möchten, müssen Sie in der SQLX-Definitionsdatei des benutzerdefinierten SQL-Vorgangs die Eigenschaft hasOutput auf true setzen.
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 Block config deklarieren.

Sie können die Abhängigkeitsbeziehung auf folgende Weise definieren:

Hinweis

  1. Erstellen und initialisieren Sie einen Entwicklungsarbeitsbereich in Ihrem Repository.
  2. Optional: Deklarieren Sie eine Datenquelle.
  3. 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:

  1. Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis definitions/.
  2. Wählen Sie die SQLX-Datei der Tabelle, Assertion oder des benutzerdefinierten SQL-Vorgangs aus, die Sie bearbeiten möchten.
  3. Geben Sie im Block config der 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.

  4. 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 Block config der 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 config Block 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 includeDependentAssertions festlegen, 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 includeDependentAssertions festlegen, um automatisch alle Assertionen von Aktion A als Abhängigkeiten von Aktion C festzulegen.

Sie können den Parameter includeDependentAssertions für Aktionen der folgenden Typen festlegen:

  • table
  • view
  • operations
Assertionen aller Abhängigkeitsaktionen als Abhängigkeiten festlegen

Sie können den Parameter dependOnDependencyAssertions festlegen, 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 dependOnDependencyAssertions Parameter festlegen, um automatisch alle Assertionen der Aktionen A und B als Abhängigkeiten von Aktion C festzulegen.

Sie können den Parameter dependOnDependencyAssertions für Aktionen der folgenden Typen festlegen:

  • table
  • view
  • operations

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:

  1. Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis definitions/.
  2. Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
  3. Geben Sie im config Block der Aktionsdatei dependencies: [ "" ] ein.
  4. 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:

    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 oder operations.
    • 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 oder operations.
    • 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 oder operations.
    • 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 uniqueKey Assertion definiert ist und das Sie als Abhängigkeit hinzufügen möchten, z. B. 0 oder 1. Wenn in der Assertion nur ein Array von Schlüsseln definiert ist, ist der Index 0.

    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 oder operations.
    • 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 uniqueKeys Assertion definiert ist und das Sie als Abhängigkeit hinzufügen möchten, z. B. 0 oder 1. Wenn in der Assertion nur ein Array von Schlüsseln definiert ist, ist der Index 0.

    Manuelle Assertion

    config {
      type: "ACTION_TYPE",
      dependencies: [ "MANUAL_ASSERTION_NAME"]
    }
    

    Ersetzen Sie Folgendes:

    • ACTION_TYPE: der Typ der Workflow-Aktion: table, view oder operations.
    • MANUAL_ASSERTION_NAME: der Name der manuellen Assertion.
  5. Wenn Sie der bearbeiteten Tabelle eine weitere Assertion als Abhängigkeit hinzufügen möchten, wiederholen Sie Schritt 4.

  6. 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:

  1. Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis definitions/.
  2. Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
  3. Setzen Sie in der Datei den Parameter includeDependentAssertions auf true. Sie haben dazu folgende Möglichkeiten:

    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 oder operations.
    • 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-Anweisung

      config { type: "ACTION_TYPE" }
    
      SELECT * FROM ${ref({name: "DEPENDENCY_ACTION_NAME", includeDependentAssertions: true})}
    

    Ersetzen Sie Folgendes:

    • ACTION_TYPE: der Typ der Workflow-Aktion: table, view oder operations.
    • DEPENDENCY_ACTION_NAME: der Name der Abhängigkeitsaktion mit den Assertionen, die Sie als Abhängigkeiten der bearbeiteten Aktion festlegen möchten.
  4. 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:

  1. Maximieren Sie in Ihrem Entwicklungsarbeitsbereich im Bereich Dateien das Verzeichnis definitions/.
  2. Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
  3. Setzen Sie in der Datei den Parameter dependOnDependencyAssertions im folgenden Format auf true:

    config {
    type: "ACTION_TYPE",
    dependOnDependencyAssertions: true,
    dependencies: [ "dependency1", "dependency2" ]
    }
    

    Ersetzen Sie ACTION_TYPE durch den Typ der Workflow-Aktion. Unterstützte Werte sind table, view und operations.

  4. 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 ref Funktion, den überschriebenen Tabellennamen ein, der in name: "" 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