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:
Integrierte Assertions zum Konfigurationsblock einer Tabelle hinzufügen
Sie können integrierte Assertions zum
config
-Block einer Tabelle hinzufügen und ihre Bedingungen angeben.Manuelle Assertions in einer separaten SQLX-Datei hinzufügen
Sie schreiben benutzerdefinierte Assertions manuell in eine separate SQLX-Datei für erweiterte Anwendungsfälle oder Datasets, die nicht von Dataform erstellt wurden.
Hinweise
Öffnen Sie in der Google Cloud Console die Seite Dataform.
Wählen Sie ein Repository aus oder erstellen Sie ein Repository.
Wählen Sie einen Entwicklungsarbeitsbereich aus oder erstellen Sie einen.
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 imconfig
-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 imconfig
-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 imconfig
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 imconfig
-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:
- Wählen Sie im Entwicklungsarbeitsbereich im Bereich Dateien eine Tabelle aus. SQLX-Definitionsdatei.
- Geben Sie im Block
config
der Tabellendateiassertions: {}
ein. - Fügen Sie Ihre Assertions in
assertions: {}
hinzu. - 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:
- Klicken Sie im Bereich Dateien neben
definitions/
auf das Dreipunkt-Menü und dann auf Mehr. - Klicken Sie auf Datei erstellen.
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.
Klicken Sie auf Datei erstellen.
Klicken Sie im Bereich Dateien auf die neue Datei.
Geben Sie Folgendes in die Datei ein:
config { type: "assertion" }
Schreiben Sie unter den Block
config
Ihre SQL-Abfrage oder mehrere Abfragen.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 aufdependencies: [ "" ]
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:
- Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien
definitions/
. - Wählen Sie eine SQLX-Datei für eine Workflowaktion aus.
- Geben Sie im Block
config
der Aktionsdateidependencies: [ "" ]
ein. 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
oderoperations
. - 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
oderoperations
. - 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
oderoperations
. - 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
oder1
. Wenn in der Assertion nur ein Array von Schlüsseln definiert ist, der Index0
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
oderoperations
. - 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
oder1
. Wenn in der Assertion nur ein Array von Schlüsseln definiert ist, der Index0
ist.
manuelle Assertion
config { type: "ACTION_TYPE", dependencies: [ "MANUAL_ASSERTION_NAME"] }
Ersetzen Sie Folgendes:
- ACTION_TYPE: Typ der Workflowaktion:
table
,view
oderoperations
. - MANUAL_ASSERTION_NAME ist der Name der manuellen Assertion.
- ACTION_TYPE: Typ der Workflowaktion:
So fügen Sie der bearbeiteten Tabelle eine weitere Assertion als Abhängigkeit hinzu: wiederholen Sie Schritt 4.
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:
- Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien
definitions/
. - Wählen Sie eine SQLX-Datei für eine Workflowaktion aus.
Legen Sie in der Datei den Parameter
includeDependentAssertions
auftrue
fest. auf eine der folgenden Arten:Im
config
-Blockconfig { type: "ACTION_TYPE", dependencies: [{name: "dEPENDENCY_ACTION_NAME", includeDependentAssertions: true}] }
Ersetzen Sie Folgendes:
- ACTION_TYPE: Typ der Workflowaktion:
table
,view
oderoperations
. - DEPENDENCY_ACTION_NAME: der Name der Abhängigkeitsaktion welche Assertions du als Abhängigkeiten der bearbeiteten Aktion festlegen möchtest.
In der
SELECT
-Anweisungconfig { type: "ACTION_TYPE" } SELECT * FROM ${ref({name: "DEPENDENCY_ACTION_NAME", includeDependentAssertions: true})}
Ersetzen Sie Folgendes:
- ACTION_TYPE: Typ der Workflowaktion:
table
,view
oderoperations
. - DEPENDENCY_ACTION_NAME: der Name der Abhängigkeitsaktion welche Assertions du als Abhängigkeiten der bearbeiteten Aktion festlegen möchtest.
- ACTION_TYPE: Typ der Workflowaktion:
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:
- Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien
definitions/
. - Wählen Sie eine SQLX-Datei für eine Workflowaktion aus.
Legen Sie in der Datei den Parameter
dependOnDependencyAssertions
auftrue
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
undoperations
.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
- Weitere Informationen zu Assertion-Typen finden Sie unter Dataform API.
- Informationen zum Definieren von Assertions mit JavaScript findest du unter SQL-Workflows mit JavaScript erstellen
- Informationen zum manuellen Ausführen von Workflows finden Sie unter Ausführung auslösen: