Tabellen mit Assertions testen

In diesem Dokument erfahren Sie, wie Sie Dataform Core erstellen, Dataform-Tabellen-Assertions erstellen und Ihren Workflowcode testen.

Assertions

Eine Assertion ist eine Abfrage für einen Datenqualitätstest, mit der Zeilen gefunden werden, die gegen eine oder mehr Regeln in der Abfrage angegeben. Wenn die Abfrage Zeilen zurückgibt, schlägt fehl. Dataform führt bei jeder Aktualisierung Ihres SQL-Workflows Assertions aus und Sie werden benachrichtigt, wenn Assertions fehlschlagen.

Dataform erstellt automatisch Ansichten in BigQuery, die Ergebnisse kompilierter Assertion-Abfragen. Als die in Ihrer Workflow-Einstellungsdatei konfiguriert wurden, Dataform erstellt diese Ansichten in einem Assertion-Schema, Assertion-Ergebnisse prüfen

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

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

Sie können Assertions auf folgende Arten erstellen:

Hinweise

  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 Repository.

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

  4. Definieren Sie eine Tabelle.

Erforderliche Rollen

Um die Berechtigungen zu erhalten, die Sie zum Erstellen von Assertions benötigen, bitten Sie Ihren Administrator, Ihnen IAM-Rolle Dataform Editor (roles/dataform.editor) für Arbeitsbereiche. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Integrierte Assertions erstellen

Sie können integrierte Dataform-Assertions zum config-Block einer . Dataform führt diese Assertions nach der Tabellenerstellung aus. Nachher Dataform veröffentlicht die Tabelle, können Sie die Assertion prüfen.

Sie können die folgenden Assertions im config-Block einer Tabelle erstellen:

  • nonNull

    Diese Bedingung bestätigt, dass die angegebenen Spalten nicht für alle Nullwerte Tabellenzeilen. Diese Bedingung wird für Spalten verwendet, die nie null sein dürfen.

    Das folgende Codebeispiel zeigt eine nonNull-Assertion im config-Block einer Tabelle:

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

    Mit dieser Bedingung wird bestätigt, dass alle Tabellenzeilen der benutzerdefinierten Logik folgen, definieren. Jede Zeilenbedingung ist ein benutzerdefinierter SQL-Ausdruck und jede Tabellenzeile ist Zeilenbedingung ausgewertet. Die Assertion schlägt fehl, wenn eine Tabellenzeile Zeilenbedingung nicht erfüllt.

    Das folgende Codebeispiel zeigt eine benutzerdefinierte rowConditions-Assertion 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

    Diese Bedingung bestätigt, dass in einer angegebenen Spalte keine Tabellenzeilen den Wert und denselben Wert haben.

    Das folgende Codebeispiel zeigt eine uniqueKey-Assertion im config Block einer Ansicht:

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

    Diese Bedingung bestätigt, dass in den angegebenen Spalten keine Tabellenzeilen denselben Wert. Die Assertion schlägt fehl, wenn mehr als eine Zeile im Tabelle mit denselben Werten für alle angegebenen Spalten.

    Das folgende Codebeispiel zeigt eine uniqueKeys-Assertion im config -Block einer Tabelle:

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

Assertions zum config-Block hinzufügen

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

  1. Wählen Sie im Entwicklungsarbeitsbereich im Bereich Dateien eine Tabelle aus. SQLX-Definitionsdatei.
  2. Geben Sie im Block config der Tabellendatei assertions: {} ein.
  3. Fügen Sie Ihre Assertions in assertions: {} hinzu.
  4. Optional: Klicken Sie auf Format.

Im folgenden Codebeispiel sehen Sie die Bedingungen, die im config-Block 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 Assertions mit SQLX erstellen

Manuelle Assertions sind SQL-Abfragen, die Sie in eine dedizierte SQLX-Datei schreiben. A SQL-Abfrage für manuelle Assertion muss null Zeilen zurückgeben. Wenn die Abfrage Zeilen zurückgibt wenn sie ausgeführt wird, schlägt die Assertion fehl.

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

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

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

  4. Klicken Sie auf Datei erstellen.

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

  6. Geben Sie Folgendes in die Datei ein:

    config {
      type: "assertion"
    }
    
  7. Schreiben Sie unter den Block config Ihre SQL-Abfrage oder mehrere Abfragen.

  8. Optional: Klicken Sie auf Format.

Das folgende Codebeispiel zeigt eine manuelle Assertion in einer SQLX-Datei, 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

Assertions als Abhängigkeiten festlegen

Wenn Workflowaktion B von Workflowaktion A abhängt, die Assertions enthält, Nicht ausgeführte Assertions von Aktion A blockiert Dataform nicht Ausführung von Aktion B aus. Ausführung Aktion B nur, wenn die Assertions von Aktion A bestanden wurden, Sie müssen die Assertions von Aktion A als Abhängigkeiten von Aktion B festlegen.

Sie können Assertions als Abhängigkeiten einer ausgewählten auf folgende Arten ausführen:

Ausgewählte Assertions als Abhängigkeiten festlegen

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

Wenn beispielsweise Aktion B von Aktion A abhängt, Aktion B soll nur von ausgewählten Assertions abhängen der Aktion A können Sie die ausgewählten Assertions config-Aktionsblock B hinzu.

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

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

Sie können den includeDependentAssertions-Parameter automatisch auf Alle direkten Assertions einer ausgewählten Abhängigkeits-Workflowaktion festlegen als der bearbeiteten Aktion. Dataform fügt diese Assertions bei jeder Kompilierung der Aktion, um sicherzustellen, sind aktuell, wenn sich die Assertions der Abhängigkeitsaktion ändern.

Wenn beispielsweise Aktion C von den Aktionen A und B abhängt, aber Aktion C soll nur von den Assertions der Aktion A abhängen. können Sie die Aktion C bearbeiten und den Parameter includeDependentAssertions festlegen. um automatisch alle Assertions von Aktion A als Abhängigkeiten festzulegen der Aktion C.

Du kannst den includeDependentAssertions-Parameter für Aktionen festlegen folgenden Typen:

  • table
  • view
  • operations
Assertions für alle Abhängigkeitsaktionen als Abhängigkeiten festlegen

Du kannst die dependOnDependencyAssertions festlegen Parameter, um automatisch alle direkten Assertions aus allen Abhängigkeitsaktionen festzulegen der bearbeiteten Aktion als zusätzliche Abhängigkeiten der bearbeiteten Aktion. Dataform fügt diese Assertions bei jeder Kompilierung als Abhängigkeiten hinzu der Maßnahme, um sicherzustellen, sind aktuell, wenn sich die Assertions der Abhängigkeitsaktion ändern.

Wenn beispielsweise Aktion C von den Aktionen A und B abhängt, können Sie die Aktion C bearbeiten und den Parameter dependOnDependencyAssertions festlegen. um automatisch alle Assertions für die Aktionen A und B festzulegen. als Abhängigkeiten von Aktion C.

Du kannst den dependOnDependencyAssertions-Parameter für Aktionen festlegen folgenden Typen:

  • table
  • view
  • operations

Wenn Sie den Parameter dependOnDependencyAssertions und den Parameter includeDependentAssertions-Parameter in einer einzelnen Datei hat der Parameter includeDependentAssertions Vorrang. Wenn Sie beispielsweise dependOnDependencyAssertions auf true festlegen, aber auch includeDependentAssertions auf false für eine ausgewählte Abhängigkeit festlegen verwendet Dataform Assertions für diese Aktion nicht zu Abhängigkeiten.

Das folgende Codebeispiel zeigt die dependOnDependencyAssertions und includeDependentAssertions-Parameter, die in derselben Tabellendefinitionsdatei festgelegt wurden:

// 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 alle direkten Assertions hinzu von actionA und actionC während der Kompilierung auf Abhängigkeiten von tableName.

Ausgewählte Assertions als Abhängigkeiten festlegen

So führen Sie eine Workflowaktion nur aus, wenn die ausgewählten Assertions bestanden wurden: Sie können die ausgewählte Assertion zu dependencies: [ "" ] hinzufügen im config-Block der bearbeiteten Aktion.

So legen Sie eine ausgewählte Assertion als Abhängigkeit einer ausgewählten Workflowaktion fest: führen Sie folgende Schritte aus:

  1. Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien definitions/.
  2. Wählen Sie eine SQLX-Datei für eine Workflowaktion aus.
  3. Geben Sie im Block config der Aktionsdatei dependencies: [ "" ] ein.
  4. Geben Sie in dependencies: [ "" ] den Namen der Assertion für die Aktion ein oder Dateiname der manuellen Assertion, die Sie als Abhängigkeit festlegen möchten in einem der folgenden Formate hochladen:

    nonNull

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

    Ersetzen Sie Folgendes:

    • ACTION_TYPE: Typ der Workflowaktion: table, view oder operations.
    • ACTION_DATASET_NAME: der Name des Datasets, in dem die Aktion definiert ist. Das Standard-Dataset wird in der Datei mit den Workfloweinstellungen definiert.
    • ACTION_NAME: der Name der Aktion, in der die Assertion erstellt wird definiert ist.

    rowConditions

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

    Ersetzen Sie Folgendes:

    • ACTION_TYPE: Typ der Workflowaktion: table, view oder operations.
    • DATASET_NAME: der Name des Datasets, in dem die Aktion definiert ist. Das Standard-Dataset wird in der Datei mit den Workfloweinstellungen 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: Typ der Workflowaktion: table, view oder operations.
    • DATASET_NAME: der Name des Datasets, in dem die Tabelle verwendet wird. definiert ist. Das Standard-Dataset wird in der Datei mit den Workfloweinstellungen definiert.
    • ACTION_NAME: der Name der Tabelle, in der die Assertion erstellt wird definiert ist.
    • INDEX: Index des Arrays von Schlüsseln, die im uniqueKey-Assertion, die Sie als Abhängigkeit hinzufügen möchten. Beispiel: 0 oder 1. Wenn in der Assertion nur ein Array von Schlüsseln definiert ist, der Index 0 ist.

    uniqueKeys

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

    Ersetzen Sie Folgendes:

    • ACTION_TYPE: Typ der Workflowaktion: table, view oder operations.
    • DATASET_NAME: der Name des Datasets, in dem die Tabelle verwendet wird. definiert ist. Das Standard-Dataset wird in der Datei mit den Workfloweinstellungen definiert.
    • ACTION_NAME: der Name der Tabelle, in der die Assertion erstellt wird definiert ist.
    • INDEX: Index des Arrays von Schlüsseln, die im uniqueKeys-Assertion, die 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, der Index 0 ist.

    manuelle Assertion

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

    Ersetzen Sie Folgendes:

    • ACTION_TYPE: Typ der Workflowaktion: table, view oder operations.
    • MANUAL_ASSERTION_NAME ist der Name der manuellen Assertion.
  5. So fügen Sie der bearbeiteten Tabelle eine weitere Assertion als Abhängigkeit hinzu: wiederholen Sie Schritt 4.

  6. Optional: Klicken Sie auf Format.

Das folgende Codebeispiel zeigt Assertions, die zu Tabelle A hinzugefügt wurden. definiert im Dataset dataform:

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

Das folgende Codebeispiel zeigt Assertions für Tabelle A, die als Abhängigkeiten hinzugefügt wurden zu Tabelle B:

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

Das folgende Codebeispiel zeigt eine manuelle Assertion, die im Datei manualAssertion.sqlx, die als Abhängigkeit zu einer Ansicht hinzugefügt wurde:

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

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

Assertions einer ausgewählten Aktion als Abhängigkeiten festlegen

Workflowaktion nur ausführen, wenn alle direkten Assertions eines ausgewählten Abhängigkeitsaktions-, Legen Sie den Parameter includeDependentAssertions in der bearbeiteten Aktion auf true fest. Dataform fügt automatisch direkte Assertions der ausgewählten Abhängigkeit hinzu während der Kompilierung. Der Standardwert ist false.

Um alle Assertions einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten festzulegen, führen Sie folgende Schritte aus:

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

    Im config-Block

    config {
    type: "ACTION_TYPE",
    dependencies: [{name: "dEPENDENCY_ACTION_NAME", includeDependentAssertions: true}]
    }
    

    Ersetzen Sie Folgendes:

    • ACTION_TYPE: Typ der Workflowaktion: table, view oder operations.
    • DEPENDENCY_ACTION_NAME: der Name der Abhängigkeitsaktion welche Assertions du als Abhängigkeiten der bearbeiteten Aktion festlegen möchtest.

    In der SELECT-Anweisung

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

    Ersetzen Sie Folgendes:

    • ACTION_TYPE: Typ der Workflowaktion: table, view oder operations.
    • DEPENDENCY_ACTION_NAME: der Name der Abhängigkeitsaktion welche Assertions du als Abhängigkeiten der bearbeiteten Aktion festlegen möchtest.
  4. Optional: Klicken Sie auf Format.

Das folgende Codebeispiel zeigt tableC, das von viewA, tableB, und alle Assertions für tableB:

// filename is tableC.sqlx

config {
type: "table",
dependencies: ["viewA", {name: "tableB", includeDependentAssertions: true}]
}

SELECT * FROM ...

Im vorherigen Codebeispiel fügt Dataform automatisch alle direkte Assertions von tableB als Abhängigkeiten von tableC während der Kompilierung.

Assertions aller Abhängigkeitsaktionen als Abhängigkeiten festlegen

Workflowaktion nur ausführen, wenn alle direkten Assertions der Abhängigkeitsaktionen übergeben werden, Legen Sie den Parameter dependOnDependencyAssertions in der bearbeiteten Aktion auf true fest. Dataform fügt automatisch direkte Assertions für Abhängigkeiten hinzu Aktionen während der Kompilierung als Abhängigkeiten. Der Standardwert ist false.

Wenn Sie den Parameter dependOnDependencyAssertions und den Parameter includeDependentAssertions-Parameter in einer einzelnen Datei Der Parameter includeDependentAssertions hat für die Abhängigkeit Vorrang. Aktion, für die es festgelegt ist.

Um alle Assertions einer ausgewählten Abhängigkeitsaktion als Abhängigkeiten festzulegen, führen Sie folgende Schritte aus:

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

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

    Ersetzen Sie ACTION_TYPE: Typ der Workflowaktion. Unterstützte Werte sind table, view und operations.

  4. Optional: Klicken Sie auf Format.

Das folgende Codebeispiel zeigt sometableE, das von sometableA abhängt, sometabletableB, sometableC und sometableD sowie alle direkten Assertions für 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 automatisch alle direkte Assertions für sometableA, sometableB, sometableC und sometableD als Abhängigkeiten zu sometableE.

Nächste Schritte