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:
Dem Konfigurationsblock einer Tabelle vordefinierte Behauptungen hinzufügen
Sie können dem
config
-Block einer Tabelle vordefinierte Behauptungen hinzufügen und ihre Bedingungen angeben.Manuelle Behauptungen in einer separaten SQLX-Datei hinzufügen
Benutzerdefinierte Behauptungen werden manuell in einer separaten SQLX-Datei für erweiterte Anwendungsfälle oder für Datasets geschrieben, die nicht von Dataform erstellt wurden.
Hinweis
Öffnen Sie in der Google Cloud Console die Seite Dataform.
Wählen Sie ein Repository aus oder erstellen Sie ein neues.
Wählen Sie einen Entwicklungsarbeitsbereich aus oder erstellen Sie einen.
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 imconfig
-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 imconfig
-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 imconfig
-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 imconfig
-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:
- Wählen Sie in Ihrem Entwicklungsbereich im Bereich Dateien eine SQLX-Datei mit Tabellendefinitionen aus.
- Geben Sie im Block
config
der Tabellendateiassertions: {}
ein. - Fügen Sie in
assertions: {}
Ihre Behauptungen hinzu. - 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:
- Klicken Sie im Bereich Dateien neben
definitions/
auf das Dreipunkt-MenüMehr.
- Klicken Sie auf Datei erstellen.
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.
Klicken Sie auf Datei erstellen.
Klicken Sie im Bereich Dateien auf die neue Datei.
Geben Sie in die Datei Folgendes ein:
config { type: "assertion" }
Geben Sie unter dem Block
config
Ihre SQL-Abfrage oder mehrere Abfragen ein.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 Aktiondependencies: [ "" ]
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:
- Maximieren Sie in Ihrem Entwicklungsbereich im Bereich Dateien
definitions/
. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
- Geben Sie im Block
config
der Aktionsdateidependencies: [ "" ]
ein. 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
oderoperations
. - 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
oderoperations
. - 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
oderoperations
. - 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
oder1
. Wenn in der Assertion nur ein Schlüsselarray 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 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
oder1
. Wenn in der Assertion nur ein Schlüsselarray definiert ist, ist der Index0
.
manuelle Behauptung
config { type: "ACTION_TYPE", dependencies: [ "MANUAL_ASSERTION_NAME"] }
Ersetzen Sie Folgendes:
- ACTION_TYPE: Der Typ der Workflow-Aktion:
table
,view
oderoperations
. - MANUAL_ASSERTION_NAME 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 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:
- Maximieren Sie in Ihrem Entwicklungsbereich im Bereich Dateien
definitions/
. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
Legen Sie in der Datei den Parameter
includeDependentAssertions
auf eine der folgenden Arten auftrue
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
oderoperations
. - 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
-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, für die Sie die Behauptungen 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 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:
- Maximieren Sie in Ihrem Entwicklungsbereich im Bereich Dateien
definitions/
. - Wählen Sie eine SQLX-Datei für die Workflow-Aktion aus.
Legen Sie in der Datei den Parameter
dependOnDependencyAssertions
im folgenden Format auftrue
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
undoperations
.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
- Weitere Informationen zu Bestätigungstypen finden Sie in der Dataform API.
- Informationen zum Definieren von Behauptungen mit JavaScript finden Sie unter Dataform-Workflows mit JavaScript erstellen.
- Informationen zum manuellen Ausführen von Workflows finden Sie unter Triggerausführung.