Tabellen mit Behauptungen testen

In diesem Dokument erfahren Sie, wie Sie mit dem Dataform-Kern Dataform-Tabellenaussagen erstellen und Ihren Workflowcode testen.

Behauptungen

Eine Assertion ist eine Abfrage für Datenqualitätstests, mit der Zeilen gefunden werden, die gegen eine oder mehrere in der Abfrage angegebene Bedingungen verstoßen. Wenn die Abfrage Zeilen zurückgibt, schlägt die Prüfung fehl. Dataform führt jedes Mal, wenn der SQL-Workflow aktualisiert wird, Prüfungen durch und benachrichtigt Sie, wenn Prüfungen fehlschlagen.

Dataform erstellt automatisch Ansichten in BigQuery, die die Ergebnisse der kompilierten Bestätigungsanfragen enthalten. Wie in der Datei mit den Workflow-Einstellungen konfiguriert, erstellt Dataform diese Ansichten in einem Schema für Prüfungen, in dem Sie die Prüfungsergebnisse prüfen können.

Für das Standardschema dataform_assertions erstellt Dataform beispielsweise eine Ansicht in BigQuery im folgenden Format: dataform_assertions.assertion_name.

Sie können Behauptungen für alle Dataform-Tabellentypen erstellen: Tabellen, inkrementelle Tabellen, Ansichten und materialisierte Ansichten.

Sie haben folgende Möglichkeiten, Behauptungen zu erstellen:

Hinweis

  1. Öffnen Sie in der Google Cloud Console die Seite Dataform.

    Zur Seite „Dataform“

  2. Wählen Sie ein Repository aus oder erstellen Sie ein neues.

  3. Wählen Sie einen Entwicklungsarbeitsbereich aus oder erstellen Sie einen.

  4. Tabelle definieren

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 Erstellen von Behauptungen 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.

Integrierte Behauptungen erstellen

Sie können dem config-Block einer Tabelle vordefinierte Dataform-Behauptungen hinzufügen. Dataform führt diese Prüfungen nach dem Erstellen der Tabelle aus. Nachdem Dataform die Tabelle erstellt hat, sehen Sie auf dem Tab Workflow-Ausführungsprotokolle Ihres Arbeitsbereichs, ob die Assertion bestanden hat.

Im config-Block einer Tabelle können Sie die folgenden Behauptungen erstellen:

  • nonNull

    Mit dieser Bedingung wird geprüft, ob die angegebenen Spalten in allen Tabellenzeilen nicht NULL sind. Diese Bedingung wird für Spalten verwendet, die niemals null sein können.

    Das folgende Codebeispiel zeigt eine nonNull-Bestätigung im config-Block einer Tabelle:

config {
  type: "table",
  assertions: {
    nonNull: ["user_id", "customer_id", "email"]
  }
}
SELECT ...
  • rowConditions

    Mit dieser Bedingung wird festgelegt, dass alle Tabellenzeilen der von Ihnen definierten benutzerdefinierten Logik folgen. Jede Zeilenbedingung ist ein benutzerdefinierter SQL-Ausdruck und jede Tabellenzeile wird anhand jeder Zeilenbedingung ausgewertet. Die Prüfung schlägt fehl, wenn eine Tabellenzeile zu false führt.

    Das folgende Codebeispiel zeigt eine benutzerdefinierte rowConditions-Bestätigung im config-Block einer inkrementellen Tabelle:

config {
  type: "incremental",
  assertions: {
    rowConditions: [
      'signup_date is null or signup_date > "2022-08-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...
  • uniqueKey

    Mit dieser Bedingung wird geprüft, ob in einer bestimmten Spalte keine Tabellenzeilen denselben Wert haben.

    Das folgende Codebeispiel zeigt eine uniqueKey-Bestätigung im config-Block einer Ansicht:

config {
  type: "view",
  assertions: {
    uniqueKey: ["user_id"]
  }
}
SELECT ...
  • uniqueKeys

    Mit dieser Bedingung wird geprüft, ob in den angegebenen Spalten keine Tabellenzeilen denselben Wert haben. Die Prüfung schlägt fehl, wenn die Tabelle mehr als eine Zeile mit denselben Werten für alle angegebenen Spalten enthält.

    Das folgende Codebeispiel zeigt eine uniqueKeys-Bestätigung im config-Block einer Tabelle:

config {
  type: "table",
  assertions: {
    uniqueKeys: [["user_id"], ["signup_date", "customer_id"]]
  }
}
SELECT ...

Block config mit Behauptungen ergänzen

So fügen Sie dem Konfigurationsblock einer Tabelle Behauptungen hinzu:

  1. Wählen Sie in Ihrem Entwicklungsbereich im Bereich Dateien eine SQLX-Datei mit Tabellendefinitionen aus.
  2. Geben Sie im Block config der Tabellendatei assertions: {} ein.
  3. Fügen Sie in assertions: {} Ihre Behauptungen hinzu.
  4. Optional: Klicken Sie auf Formatieren.

Das folgende Codebeispiel zeigt die Bedingungen, die im Block config hinzugefügt wurden:

config {
  type: "table",
  assertions: {
    uniqueKey: ["user_id"],
    nonNull: ["user_id", "customer_id"],
    rowConditions: [
      'signup_date is null or signup_date > "2019-01-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...

Manuelle Behauptungen mit SQLX erstellen

Manuelle Bestätigungen sind SQL-Abfragen, die Sie in einer speziellen SQLX-Datei schreiben. Eine SQL-Abfrage für manuelle Bestätigungen darf keine Zeilen zurückgeben. Wenn die Abfrage bei der Ausführung Zeilen zurückgibt, schlägt die Assertion fehl.

So fügen Sie einer neuen SQLX-Datei manuelle Behauptungen hinzu:

  1. Klicken Sie im Bereich Dateien neben definitions/ auf das Dreipunkt-Menü  Mehr.
  2. Klicken Sie auf Datei erstellen.
  3. Geben Sie im Feld Dateipfad hinzufügen den Namen der Datei gefolgt von .sqlx ein. Beispiel: definitions/custom_assertion.sqlx

    Dateinamen dürfen nur Zahlen, Buchstaben, Bindestriche und Unterstriche enthalten.

  4. Klicken Sie auf Datei erstellen.

  5. Klicken Sie im Bereich Dateien auf die neue Datei.

  6. Geben Sie in die Datei Folgendes ein:

    config {
      type: "assertion"
    }
    
  7. Geben Sie unter dem Block config Ihre SQL-Abfrage oder mehrere Abfragen ein.

  8. Optional: Klicken Sie auf Formatieren.

Das folgende Codebeispiel zeigt eine manuelle Bestätigung in einer SQLX-Datei, die festlegt, dass die Felder A, B und c in sometable niemals NULL sind:

config { type: "assertion" }

SELECT
  *
FROM
  ${ref("sometable")}
WHERE
  a IS NULL
  OR b IS NULL
  OR c IS NULL

Behauptungen als Abhängigkeiten festlegen

Wenn die Workflow-Aktion B von der Workflow-Aktion A abhängt, die Behauptungen enthält, verhindert ein Fehlschlagen der Behauptungen der Aktion A nicht, dass Dataform die Aktion B ausführt. Wenn Aktion B nur ausgeführt werden soll, wenn die Behauptungen der Aktion A bestehen, müssen Sie die Behauptungen der Aktion A als Abhängigkeiten der Aktion B festlegen.

Sie können Behauptungen auf folgende Arten als Abhängigkeiten einer ausgewählten Aktion festlegen:

Ausgewählte Behauptungen als Abhängigkeiten festlegen

Sie können ausgewählte Behauptungen manuell als Abhängigkeiten festlegen, indem Sie sie im Block config der bearbeiteten Aktion dependencies: [ "" ] hinzufügen.

Wenn die Aktion B beispielsweise von der Aktion A abhängt und Sie möchten, dass die Aktion B nur von ausgewählten Behauptungen der Aktion A abhängt, können Sie diese ausgewählten Behauptungen dem config-Block der Aktion B hinzufügen.

Sie können ausgewählte Behauptungen manuell als Abhängigkeiten für alle Aktionstypen festlegen, mit Ausnahme von Datenquellendeklarationen.

Behauptungen einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten festlegen

Sie können den Parameter includeDependentAssertions so festlegen, dass alle direkten Behauptungen einer ausgewählten Workflow-Aktion mit Abhängigkeiten automatisch als Abhängigkeiten der bearbeiteten Aktion festgelegt werden. Dataform fügt diese Behauptungen bei jeder Kompilierung der Aktion als Abhängigkeiten hinzu, damit sie auf dem neuesten Stand sind, wenn sich die Behauptungen der Abhängigkeitsaktion ändern.

Wenn die Aktion C beispielsweise von den Aktionen A und B abhängt, Sie aber möchten, dass C nur von Behauptungen der Aktion A abhängt, können Sie die Aktion C bearbeiten und den Parameter includeDependentAssertions so festlegen, dass alle Behauptungen 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
Behauptungen aller Abhängigkeitsaktionen als Abhängigkeiten festlegen

Sie können den Parameter dependOnDependencyAssertions so festlegen, dass alle direkten Behauptungen aus allen Abhängigkeitsaktionen der bearbeiteten Aktion automatisch als zusätzliche Abhängigkeiten der bearbeiteten Aktion festgelegt werden. Dataform fügt diese Behauptungen bei jeder Kompilierung der Aktion als Abhängigkeiten hinzu, damit sie auf dem neuesten Stand sind, wenn sich die Behauptungen der Abhängigkeitsaktion ändern.

Wenn Aktion C beispielsweise von den Aktionen A und B abhängt, können Sie Aktion C bearbeiten und den Parameter dependOnDependencyAssertions so festlegen, dass alle Behauptungen 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 für eine ausgewählte Abhängigkeitsaktion auch includeDependentAssertions auf false festlegen, fügt Dataform den Abhängigkeiten keine Behauptungen zu dieser Aktion hinzu.

Im folgenden Codebeispiel sind die Parameter dependOnDependencyAssertions und includeDependentAssertions in derselben Datei mit Tabellendefinitionen festgelegt:

// 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 Behauptungen von actionA und actionC zu den Abhängigkeiten von tableName hinzu.

Ausgewählte Behauptungen als Abhängigkeiten festlegen

Wenn eine Workflow-Aktion nur ausgeführt werden soll, wenn ausgewählte Behauptungen bestehen, können Sie die ausgewählte Behauptung im Block config der bearbeiteten Aktion zu dependencies: [ "" ] hinzufügen.

So legen Sie eine ausgewählte Assertion als Abhängigkeit einer ausgewählten Workflow-Aktion fest:

  1. Maximieren Sie in Ihrem Entwicklungsbereich im Bereich Dateien definitions/.
  2. Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
  3. Geben Sie im Block config der Aktionsdatei dependencies: [ "" ] ein.
  4. Geben Sie in dependencies: [ "" ] den Namen der Aktionsbestätigung oder den Dateinamen der manuellen Bestätigung ein, die Sie als Abhängigkeit festlegen möchten. Verwenden Sie dabei eines 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 oder operations.
    • ACTION_DATASET_NAME: Der Name des Datensatzes, in dem die Aktion definiert ist. Der Standarddatensatz ist in der Datei mit den Workflow-Einstellungen definiert.
    • ACTION_NAME: der Name der Aktion, in der die Behauptung 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 Datensatzes, in dem die Aktion definiert ist. Der Standarddatensatz ist in der Datei mit den Workflow-Einstellungen definiert.
    • ACTION_NAME: Der Name der Aktion, in der die Behauptung 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 Datensatzes, in dem die Tabelle definiert ist. Der Standarddatensatz ist in der Datei mit den Workflow-Einstellungen definiert.
    • ACTION_NAME: der Name der Tabelle, in der die Behauptung definiert ist.
    • INDEX: Der Index des Schlüssel-Arrays, das in der uniqueKey-Behauptung definiert ist und als Abhängigkeit hinzugefügt werden soll. Beispiel: 0 oder 1. Wenn in der Assertion nur ein Schlüsselarray 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 Datensatzes, in dem die Tabelle definiert ist. Der Standarddatensatz ist in der Datei mit den Workflow-Einstellungen definiert.
    • ACTION_NAME: der Name der Tabelle, in der die Behauptung definiert ist.
    • INDEX: Der Index des Schlüsselarrays, das in der uniqueKeys-Behauptung definiert ist und als Abhängigkeit hinzugefügt werden soll, z. B. 0 oder 1. Wenn in der Assertion nur ein Schlüsselarray definiert ist, ist der Index 0.

    manuelle Behauptung

    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 Behauptung.
  5. Wenn Sie der bearbeiteten Tabelle eine weitere Behauptung als Abhängigkeit hinzufügen möchten, wiederholen Sie Schritt 4.

  6. Optional: Klicken Sie auf Formatieren.

Im folgenden Codebeispiel sind Behauptungen zu sehen, die der Tabelle A hinzugefügt wurden, die im Dataset dataform definiert ist:

config {
  type: "table",
  assertions: {
    uniqueKey: ["user_id"],
    nonNull: ["user_id", "customer_id"],
  }
}

Im folgenden Codebeispiel sind die Behauptungen für Tabelle A zu sehen, die Tabelle B als Abhängigkeiten hinzugefügt wurden:

config {
  type: "table",
  dependencies: [ "dataform_A_assertions_uniqueKey_0",  "dataform_A_assertions_nonNull"]
}

Im folgenden Codebeispiel wird eine manuelle Behauptung in der Datei manualAssertion.sqlx definiert, die einer Ansicht als Abhängigkeit hinzugefügt wird:

config {
  type: "view",
  dependencies: [ "manualAssertion"]
}

Das folgende Codebeispiel zeigt die manual_assertion-Datei und die Behauptungen 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 ...

Behauptungen einer ausgewählten Aktion als Abhängigkeiten festlegen

Wenn eine Workflow-Aktion nur ausgeführt werden soll, wenn alle direkten Behauptungen einer ausgewählten Abhängigkeitsaktion bestanden haben, setzen Sie in der bearbeiteten Aktion den Parameter includeDependentAssertions auf true. Dataform fügt Abhängigkeiten während der Kompilierung automatisch direkte Behauptungen der ausgewählten Abhängigkeitsaktion hinzu. Der Standardwert ist false.

So legen Sie alle Behauptungen einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten fest:

  1. Maximieren Sie in Ihrem Entwicklungsbereich im Bereich Dateien definitions/.
  2. Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
  3. Legen Sie in der Datei den Parameter includeDependentAssertions auf eine der folgenden Arten auf true fest:

    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, für die Sie die Behauptungen 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, für die Sie die Behauptungen als Abhängigkeiten der bearbeiteten Aktion festlegen möchten.
  4. Optional: Klicken Sie auf Formatieren.

Das folgende Codebeispiel zeigt tableC, das von viewA, tableB und allen Behauptungen 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 Behauptungen von tableB als Abhängigkeiten zu tableC hinzu.

Abhängigkeiten für alle Abhängigkeitsaktionen festlegen

Wenn eine Workflow-Aktion nur ausgeführt werden soll, wenn alle direkten Behauptungen aller Abhängigkeitsaktionen bestanden haben, legen Sie in der bearbeiteten Aktion den Parameter dependOnDependencyAssertions auf true fest. Dataform fügt während der Kompilierung automatisch direkte Behauptungen von Abhängigkeitsaktionen als Abhängigkeiten hinzu. Der Standardwert ist false.

Wenn Sie den Parameter dependOnDependencyAssertions und die Parameter includeDependentAssertions in einer einzigen Datei festlegen, hat der Parameter includeDependentAssertions Vorrang für die Abhängigkeitsaktion, für die er festgelegt ist.

So legen Sie alle Behauptungen einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten fest:

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

    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, das von sometableA, sometabletableB, sometableC und sometableD abhängt, sowie alle direkten Behauptungen von Abhängigkeitstabellen:

// 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 Behauptungen von sometableA, sometableB, sometableC und sometableD als Abhängigkeiten zu sometableE hinzu.

Nächste Schritte