In diesem Dokument erfahren Sie, wie Sie Dataplex-Datenqualitätsaufgaben erstellen, mit denen Sie Datenqualitätsprüfungen für Ihre integrierten und externen BigQuery-Tabellen planen und ausführen können.
Weitere Informationen finden Sie unter Aufgaben zur Datenqualität – Übersicht.
Hinweise
In diesem Dokument wird davon ausgegangen, dass Sie bereits einen Dataplex-Lake haben, in dem Sie die Datenqualitätsaufgabe erstellen können.
Google APIs und ‑Dienste aktivieren
die Dataproc API aktivieren
Aktivieren Sie den privaten Google-Zugriff für Ihr Netzwerk und Subnetzwerk. Aktivieren Sie den privaten Google-Zugriff für das Netzwerk, das Sie für Dataplex-Datenqualitätsaufgaben verwenden möchten. Wenn Sie beim Erstellen der Dataplex-Datenqualitätsaufgabe kein Netzwerk oder Subnetzwerk angeben, verwendet Dataplex das Standard-Subnetzwerk. In diesem Fall müssen Sie den privater Google-Zugriff im Standardsubnetz aktivieren.
Spezifikationsdatei erstellen
Dataplex verwendet Open-Source-CloudDQ als Treiberprogramm. Die Anforderungen an die Dataplex-Datenqualitätsprüfung werden in CloudDQ-YAML-Spezifikationsdateien definiert.
Als Eingabe für die Datenqualitätsaufgabe können Sie eine einzelne YAML-Datei oder ein einzelnes ZIP-Archiv mit einer oder mehreren YAML-Dateien verwenden. Es wird empfohlen, die Anforderungen an die Datenqualitätsprüfung in separaten YAML-Spezifikationsdateien zu erfassen, mit einer Datei pro Abschnitt.
So bereiten Sie eine Spezifikationsdatei vor:
-
Erstellen Sie eine oder mehrere CloudDQ-YAML-Spezifikationsdateien, in denen Sie die Anforderungen an die Datenqualitätsprüfung definieren. Weitere Informationen zur erforderlichen Syntax finden Sie im Abschnitt Spezifikationsdatei dieses Dokuments.
Speichern Sie die YAML-Spezifikationsdatei im
.yml
- oder.yaml
-Format. Wenn Sie mehrere YAML-Spezifikationsdateien erstellen, speichern Sie alle Dateien in einem einzigen ZIP-Archiv. - Cloud Storage-Bucket erstellen
- Laden Sie die Spezifikationsdatei in den Cloud Storage-Bucket hoch.
Spezifikationsdatei
Ihre CloudDQ-YAML-Spezifikationsdatei muss folgende Abschnitte enthalten:
Regeln (definiert im übergeordneten YAML-Knoten
rules
): Eine Liste der auszuführenden Regeln. Sie können diese Regeln aus vordefinierten Regeltypen wieNOT_NULL
undREGEX
erstellen oder sie mit benutzerdefinierten SQL-Anweisungen wieCUSTOM_SQL_EXPR
undCUSTOM_SQL_STATEMENT
erweitern. DieCUSTOM_SQL_EXPR
-Anweisung meldet jede Zeile, diecustom_sql_expr
inFalse
ausgewertet hat, als Fehler. DieCUSTOM_SQL_STATEMENT
-Anweisung kennzeichnet alle Werte, die von der gesamten Anweisung zurückgegeben werden, als Fehler.Zeilenfilter (definiert im übergeordneten YAML-Knoten
row_filters
): SQL-Ausdrücke, die einen booleschen Wert zurückgeben, der Filter definiert, um eine Teilmenge der Daten aus dem zugrunde liegenden Subjekt zur Validierung abzurufen.Regelbindungen (im übergeordneten YAML-Knoten
rule_bindings
definiert): Definiertrules
undrule filters
, die auf die Tabellen angewendet werden sollen.Regeldimensionen (definiert im YAML-Knoten
rule_dimensions
): Hier wird die zulässige Liste der Dimensionen für Regeln zur Datenqualität definiert, die in einer Regel im entsprechendendimension
-Feld definiert werden können.Beispiel:
rule_dimensions: - consistency - correctness - duplication - completeness - conformance
Das Feld
dimension
ist für eine Regel optional. Der Abschnitt zu den Regeldimensionen ist obligatorisch, wenndimension
in einer beliebigen Regel aufgeführt ist.
Weitere Informationen finden Sie im Referenzleitfaden für CloudDQ und in den Beispielspezifikationsdateien.
Dataset zum Speichern der Ergebnisse erstellen
-
Erstellen Sie ein BigQuery-Dataset, um die Ergebnisse zu speichern.
Das Dataset muss sich in derselben Region wie die Tabellen befinden, für die Sie die Datenqualitätsaufgabe ausführen.
Dataplex verwendet dieses Dataset und erstellt oder verwendet eine Tabelle Ihrer Wahl, um die Ergebnisse zu speichern.
Dienstkonto erstellen
Erstellen Sie ein Dienstkonto mit den folgenden IAM-Rollen (Identity and Access Management) und Berechtigungen:
- Lesezugriff auf den Cloud Storage-Pfad mit den YAML-Spezifikationen. Sie können die Rolle Storage-Objekt-Betrachter (
roles/storage.objectViewer
) für den Cloud Storage-Bucket verwenden. - Lesezugriff auf BigQuery-Datasets mit zu validierenden Daten Sie können die Rolle BigQuery-Datenbetrachter verwenden.
- Schreibzugriff auf das BigQuery-Dataset, um bei Bedarf eine Tabelle zu erstellen und die Ergebnisse in diese Tabelle zu schreiben. Sie können die Rolle BigQuery-Datenbearbeiter (
roles/bigquery.dataEditor
) auf Dataset-Ebene verwenden. - Rolle BigQuery-Jobnutzer (
roles/bigquery.jobUser
) auf Projektebene, um BigQuery-Jobs in einem Projekt zu erstellen. - Die Dataplex Metadata Reader-Rolle (
roles/dataplex.metadataReader
) auf Projekt- oder Lake-Ebene. - Die Rolle Service Usage-Nutzer (
roles/serviceusage.serviceUsageConsumer
) auf Projektebene. - Die Rolle Dataproc-Worker
- Die
iam.serviceAccounts.actAs
-Berechtigung, die dem Nutzer gewährt wurde, der den Job eingereicht hat. - Die Rolle Dienstkontonutzer, die dem Dataplex-Lake-Dienstkonto zugewiesen wurde. Sie können das Dataplex-Lake-Dienstkonto in der Google Cloud Console aufrufen.
Optional: Erweiterte Einstellungen verwenden
Diese Schritte sind optional:
In BigQuery werden standardmäßig Datenqualitätsprüfungen im aktuellen Nutzerprojekt ausgeführt. Alternativ können Sie ein anderes Projekt wählen, um die BigQuery-Jobs auszuführen. Verwenden Sie dazu das Argument
--gcp_project_id
TASK_ARGS
für das--execution-args
-Attribut der Aufgabe.Wenn sich die zum Ausführen von BigQuery-Abfragen angegebene Projekt-ID von dem Projekt unterscheidet, in dem das Dienstkonto (durch
--execution-service-account
angegeben) erstellt wird, muss die Organisationsrichtlinie, die die projektübergreifende Dienstkontonutzung deaktiviert, (iam.disableServiceAccountCreation
) ausgeschaltet sein. Achten Sie außerdem darauf, dass das Dienstkonto auf den BigQuery-Jobzeitplan in dem Projekt zugreifen kann, in dem BigQuery-Abfragen ausgeführt werden.
Beschränkungen
- Alle für eine bestimmte Aufgabe zur Datenqualität angegebenen Tabellen müssen derselben Google Cloud- Region angehören.
Datenqualitätsaufgabe planen
Console
- Rufen Sie in der Google Cloud -Console die Seite Dataplex-Prozess auf.
- Klicken Sie auf Aufgabe erstellen.
- Klicken Sie auf der Karte Datenqualität prüfen auf Aufgabe erstellen.
- Wählen Sie für Dataplex-Lake Ihren Lake aus.
- Geben Sie unter ID eine ID ein.
- Führen Sie im Abschnitt Datenqualitätsspezifikation die folgenden Schritte aus:
- Klicken Sie im Feld Datei auswählen auf Durchsuchen.
Wählen Sie Ihren Cloud Storage-Bucket aus.
Klicken Sie auf Auswählen.
Führen Sie im Bereich Ergebnistabelle die folgenden Schritte aus:
Klicken Sie im Feld BigQuery-Dataset auswählen auf Durchsuchen.
Wählen Sie das BigQuery-Dataset aus, in dem die Validierungsergebnisse gespeichert werden sollen.
Klicken Sie auf Auswählen.
Geben Sie im Feld BigQuery-Tabelle den Namen der Tabelle ein, in der die Ergebnisse gespeichert werden sollen. Wenn die Tabelle nicht vorhanden ist, wird sie von Dataplex für Sie erstellt. Verwenden Sie den Namen
dq_summary
nicht, da er für interne Verarbeitungsaufgaben reserviert ist.
Wählen Sie im Abschnitt Dienstkonto im Menü Nutzerdienstkonto ein Dienstkonto aus.
Klicken Sie auf Weiter.
Konfigurieren Sie im Abschnitt Zeitplan festlegen den Zeitplan für die Ausführung der Datenqualitätsaufgabe.
Klicken Sie auf Erstellen.
gcloud-CLI
Das folgende Beispiel zeigt die Ausführung einer Datenqualitätsaufgabe, die den gcloud CLI-Befehl der Dataplex-Aufgaben verwendet:
export USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH="USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH" # Google Cloud project where the Dataplex task is created. export GOOGLE_CLOUD_PROJECT="GOOGLE_CLOUD_PROJECT" # Google Cloud region for the Dataplex lake. export DATAPLEX_REGION_ID="DATAPLEX_REGION_ID" # Public Cloud Storage bucket containing the prebuilt data quality executable artifact. There is one bucket for each Google Cloud region. export DATAPLEX_PUBLIC_GCS_BUCKET_NAME="dataplex-clouddq-artifacts-${DATAPLEX_REGION_ID}" # The Dataplex lake where your task is created. export DATAPLEX_LAKE_NAME="DATAPLEX_LAKE_NAME" # The service account used for running the task. Ensure that this service account has sufficient IAM permissions on your project, including BigQuery Data Editor, BigQuery Job User, Dataplex Editor, Dataproc Worker, and Service Usage Consumer. # The BigQuery dataset used for storing the intermediate data quality summary results and the BigQuery views associated with each rule binding. export TARGET_BQ_DATASET="TARGET_BQ_DATASET" # If you want to use a different dataset for storing the intermediate data quality summary results and the BigQuery views associated with each rule binding, use the following: export CLOUDDQ_BIGQUERY_DATASET=$TARGET_BQ_DATASET # The BigQuery dataset where the final results of the data quality checks are stored. This could be the same as CLOUDDQ_BIGQUERY_DATASET. export TARGET_BQ_DATASET="TARGET_BQ_DATASET" # The BigQuery table where the final results of the data quality checks are stored. export TARGET_BQ_TABLE="TARGET_BQ_TABLE" # The unique identifier for the task. export TASK_ID="TASK_ID" gcloud dataplex tasks create \ --location="${DATAPLEX_REGION_ID}" \ --lake="${DATAPLEX_LAKE_NAME}" \ --trigger-type=ON_DEMAND \ --execution-service-account="$DATAPLEX_TASK_SERVICE_ACCOUNT" \ --spark-python-script-file="gs://${DATAPLEX_PUBLIC_GCS_BUCKET_NAME}/clouddq_pyspark_driver.py" \ --spark-file-uris="gs://${DATAPLEX_PUBLIC_GCS_BUCKET_NAME}/clouddq-executable.zip","gs://${DATAPLEX_PUBLIC_GCS_BUCKET_NAME}/clouddq-executable.zip.hashsum","${USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH}" \ --execution-args=^::^TASK_ARGS="clouddq-executable.zip, ALL, ${USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH}, --gcp_project_id='GOOGLE_CLOUD_PROJECT', --gcp_region_id='${DATAPLEX_REGION_ID}', --gcp_bq_dataset_id='${TARGET_BQ_DATASET}', --target_bigquery_summary_table='${GOOGLE_CLOUD_PROJECT}.${TARGET_BQ_DATASET}.${TARGET_BQ_TABLE}'," \ "$TASK_ID"
Parameter | Beschreibung |
---|---|
USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH |
Der Cloud Storage-Pfad zu Ihrer YAML-Konfigurationskonfiguration für die Datenqualitätsaufgabe. Sie können eine einzelne YAML-Datei im Format .yml oder .yaml oder ein ZIP-Archiv mit mehreren YAML-Dateien haben. |
GOOGLE_CLOUD_PROJECT |
Das Google Cloud -Projekt, in dem die Dataplex-Aufgabe und die BigQuery-Jobs erstellt werden. |
DATAPLEX_REGION_ID |
Die Region des Dataplex-Lake, in der die Datenqualitätsaufgabe erstellt wird. |
SERVICE_ACCOUNT |
Das Dienstkonto, das für die Ausführung der Aufgabe verwendet wird. Dieses Dienstkonto muss die im Abschnitt Vorab beschriebenen IAM-Berechtigungen haben. |
Für --execution-args
müssen die folgenden Argumente als Positionsargumente übergeben werden, also in dieser Reihenfolge:
Argument | Beschreibung |
---|---|
clouddq-executable.zip |
Eine vorkompilierte ausführbare Datei, die aus einem öffentlichen Cloud Storage-Bucket an spark-file-uris übergeben wurde. |
ALL |
Führen Sie alle Regelbindungen aus. Alternativ können Sie bestimmte Regelbindungen in einer durch Kommas getrennten Liste angeben.
Beispiel: RULE_1,RULE_2 . |
gcp-project-id |
Projekt-ID, in der die BigQuery-Abfragen ausgeführt werden. |
gcp-region-id |
Region zum Ausführen der BigQuery-Jobs zur Validierung der Datenqualität. Diese Region sollte mit der Region für gcp-bq-dataset-id und target_bigquery_summary_table übereinstimmen. |
gcp-bq-dataset-id |
BigQuery-Dataset, in dem die rule_binding -Ansichten und Zwischenergebnisse der Datenqualitätszusammenfassung gespeichert werden. |
target-bigquery-summary-table |
Die Tabellen-ID-Referenz der BigQuery-Tabelle, in der die endgültigen Ergebnisse der Datenqualitätsprüfungen gespeichert werden. Verwenden Sie nicht den ID-Wert dq_summary , da er für interne Verarbeitungsaufgaben reserviert ist. |
--summary_to_stdout |
Optional. Wenn dieses Flag übergeben wird, werden alle Zeilen mit Validierungsergebnissen, die in der Tabelle dq_summary bei der letzten Ausführung erstellt wurden, als JSON-Einträge in Cloud Logging und stdout protokolliert. |
API
Dabei gilt:
PROJECT_ID = "Your Dataplex Project ID" REGION = "Your Dataplex lake region" LAKE_ID = "Your Dataplex lake ID" SERVICE_ACC = "Your service account used for reading the data" DATAPLEX_TASK_ID = "Unique task ID for the data quality task" BUCKET_NAME = "Your Cloud Storage bucket name containing the CloudDQ configs or YAML specification" GCP_BQ_BILLING_PROJECT_ID = "Your BigQuery billing project" GCP_BQ_REGION_ID = "Your BigQuery dataset region ID" #Optional GCP_BQ_DATASET_ID = "Your BigQuery dataset to store the data quality summary results" TARGET_TABLE_NAME = "Your target table name to store the results in BigQuery dataset"
- Senden Sie eine HTTP-POST-Anfrage:
POST https://dataplex.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/lakes/${LAKE_ID}/tasks?task_id=${DATAPLEX_TASK_ID} { "spark": { "python_script_file": f"gs://dataplex-clouddq-artifacts-us-central1/clouddq_pyspark_driver.py", "file_uris": [ f"gs://dataplex-clouddq-artifacts-us-central1/clouddq-executable.zip", f"gs://dataplex-clouddq-artifacts-us-central1/clouddq-executable.zip.hashsum", f"gs://dataplex-clouddq-artifacts-us-central1/your-clouddq-configs.zip" ] }, "execution_spec": { "args": { "TASK_ARGS":f"clouddq-executable.zip, ALL, gs://BUCKET_NAME/your-clouddq-configs.zip, --gcp_project_id=${GCP_BQ_BILLING_PROJECT_ID}, --gcp_region_id=${GCP_BQ_REGION_ID}, --gcp_bq_dataset_id=${GCP_BQ_DATASET_ID}, --target_bigquery_summary_table=${GCP_BQ_BILLING_PROJECT_ID}.${GCP_BQ_DATASET_ID}.${TARGET_TABLE_NAME}" }, "service_account": "SERVICE_ACC" }, "trigger_spec": { "type": "ON_DEMAND" }, "description": "${DATAPLEX_TASK_DESCRIPTION}" }
Weitere Informationen finden Sie unter Beispiel-Airflow-DAG für Dataplex-Datenqualitätsaufgaben.
Geplante Datenqualitätsaufgabe beobachten
Weitere Informationen zum Überwachen von Aufgaben
Ergebnisse aufrufen
Die Ergebnisse der Datenqualitätsvalidierungen werden in dem von Ihnen angegebenen BigQuery-Dataset und der Zusammenfassungstabelle gespeichert, wie unter Dataset zum Speichern der Ergebnisse erstellen beschrieben. Die Übersichtstabelle enthält eine Ausgabezusammenfassung für die verschiedenen Kombinationen aus Regelbindung und Regel je Validierungsausführung. Die Ausgabe in der Zusammenfassungstabelle enthält die folgenden Informationen:
Spaltenname | Beschreibung |
---|---|
dataplex_lake |
(String) ID des Dataplex-Lake, der die zu validierende Tabelle enthält. |
dataplex_zone |
(String) ID der Dataplex-Zone, die die zu validierende Tabelle enthält. |
dataplex_asset_id |
(String) ID des Dataplex-Assets, das die zu validierende Tabelle enthält. |
execution_ts |
(Zeitstempel) Zeitstempel für die Ausführung der Validierungsabfrage. |
rule_binding_id |
(String) ID der Regelbindung, für die Validierungsergebnisse erfasst werden. |
rule_id |
(String) ID der Regel unter der Regelbindung, für die Validierungsergebnisse erfasst werden. |
dimension |
(String) Datenqualitätsdimension der rule_id . Dieser Wert kann nur einer der im YAML-Knoten rule_dimensions angegebenen Werte sein. |
table_id |
(String) ID der Entität, für die Validierungsergebnisse erfasst werden.
Diese ID wird unter dem Parameter entity der jeweiligen Regelbindung angegeben. |
column_id |
(String) ID der Spalte, für die Validierungsergebnisse erfasst werden.
Diese ID wird unter dem Parameter column der jeweiligen Regelbindung angegeben. |
last_modified |
(Zeitstempel) Der Zeitstempel der letzten Änderung der zu validierenden table_id . |
metadata_json_string |
(String) Schlüssel/Wert-Paare des Metadatenparameters „content“, die unter der Regelbindung oder während des Datenqualitätslaufs angegeben wurden. |
configs_hashsum |
(String) Die Hash-Summe des JSON-Dokuments, das die Regelbindung und alle zugehörigen Regeln, Regelbindungen, Zeilenfilter und Entitätskonfigurationen enthält.
configs_hashsum ermöglicht das Tracking, wenn der Inhalt einer rule_binding -ID oder einer der referenzierten Konfigurationen geändert wurde. |
dq_run_id |
(String) Die eindeutige ID des Eintrags. |
invocation_id |
(String) Die ID des Datenqualitätslaufs. Alle Datenqualitätszusammenfassungen, die innerhalb derselben Datenqualitätsinstanz generiert wurden, haben denselben invocation_id . |
progress_watermark |
(Boolesch) Legt fest, ob dieser besondere Datensatz von der Datenqualitätsprüfung berücksichtigt wird, um die Hochmarke für die inkrementelle Validierung zu ermitteln. Bei FALSE wird der entsprechende Eintrag ignoriert, wenn der Wert für die Hochmarke festgelegt wird. Diese Informationen sind nützlich, wenn Sie Qualitätsprüfungen für Tests machen, die die Hochmarke nicht erhöhen sollen. Dataplex füllt dieses Feld standardmäßig mit TRUE aus. Der Wert kann jedoch überschrieben werden, wenn das --progress_watermark -Argument den Wert FALSE hat.
|
rows_validated |
(Ganzzahl) Gesamtzahl der Datensätze, die nach dem Anwenden von row_filters und möglichen Hochmarken-Filtern auf die incremental_time_filter_column_id -Spalte validiert wurden, falls angegeben. |
complex_rule_validation_errors_count |
(Gleitkommazahl) Anzahl der Zeilen, die von einer CUSTOM_SQL_STATEMENT -Regel zurückgegeben werden. |
complex_rule_validation_success_flag |
(boolescher Wert) Erfolgstatus der CUSTOM_SQL_STATEMENT -Regeln.
|
success_count |
(ganzzahl) Gesamtzahl der Datensätze, die die Validierung bestanden haben. Dieses Feld ist für CUSTOM_SQL_STATEMENT -Regeln auf NULL gesetzt.
|
success_percentage |
(Gleitkommazahl) Prozentsatz der Anzahl der Datensätze, die die Validierung innerhalb der Gesamtzahl der validierten Datensätze bestanden haben. Dieses Feld ist für CUSTOM_SQL_STATEMENT -Regeln auf NULL gesetzt. |
failed_count |
(ganze Zahl) Gesamtzahl der Datensätze, die die Validierung nicht bestanden haben. Dieses Feld ist für CUSTOM_SQL_STATEMENT -Regeln auf NULL gesetzt.
|
failed_percentage |
(Gleitkommazahl) Prozentsatz der Anzahl der Datensätze, die die Validierung innerhalb der Gesamtzahl der validierten Datensätze nicht bestanden haben. Dieses Feld ist für CUSTOM_SQL_STATEMENT -Regeln auf NULL gesetzt. |
null_count |
(ganzzahl) Gesamtzahl der Datensätze, die während der Validierung null zurückgegeben haben.
Dieses Feld ist für NOT_NULL - und CUSTOM_SQL_STATEMENT -Regeln auf NULL gesetzt. |
null_percentage |
(Gleitkommazahl) Prozentsatz der Anzahl der Datensätze, die während der Validierung innerhalb der Gesamtzahl der validierten Datensätze null zurückgegeben haben. Dieses Feld ist für NOT_NULL - und CUSTOM_SQL_STATEMENT -Regeln auf NULL gesetzt. |
failed_records_query |
Für jede fehlerhafte Regel wird in dieser Spalte eine Abfrage gespeichert, mit der Sie fehlgeschlagene Einträge abrufen können. Weitere Informationen finden Sie in diesem Dokument unter Fehlerbehebung bei fehlgeschlagenen Regeln mit failed_records_query . |
Für BigQuery-Entitäten wird für jede rule_binding
eine Ansicht erstellt, die die SQL-Bestätigungslogik der letzten Ausführung enthält. Sie finden diese Ansichten im BigQuery-Dataset, das im Argument --gcp-bq-dataset-id
angegeben ist.
Kostenoptimierung
Mit den folgenden Optimierungen können Sie die Kosten senken.
Inkrementenbasierte Validierungen
Es gibt oft Tabellen, die regelmäßig mit neuen Partitionen (neue Zeilen) aktualisiert werden. Wenn Sie die alten Partitionen nicht bei jeder Ausführung neu validieren möchten, können Sie inkrementelle Validierungen verwenden.
Für die inkrementelle Validierung muss Ihre Tabelle eine Spalte vom Typ TIMESTAMP
oder DATETIME
enthalten, deren Wert monoton steigt. Sie können die Spalten verwenden, nach denen Ihre BigQuery-Tabelle partitioniert ist.
Wenn Sie eine inkrementelle Validierung angeben möchten, geben Sie einen Wert für incremental_time_filter_column_id=TIMESTAMP/DATETIME type column
als Teil einer Regelbindung an.
Wenn Sie eine Spalte angeben, werden bei der Datenqualitätsaufgabe nur Zeilen mit einem TIMESTAMP
-Wert berücksichtigt, der größer als der Zeitstempel der letzten ausgeführten Datenqualitätsaufgabe ist.
Beispielspezifikationsdateien
Wenn Sie diese Beispiele verwenden möchten, erstellen Sie ein BigQuery-Dataset mit dem Namen sales
. Erstellen Sie dann eine Faktentabelle mit dem Namen sales_orders
und fügen Sie Beispieldaten hinzu. Führen Sie dazu eine Abfrage mit den folgenden GoogleSQL-Anweisungen aus:
CREATE OR REPLACE TABLE sales.sales_orders
(
id STRING NOT NULL,
last_modified_timestamp TIMESTAMP,
customer_id STRING,
item_id STRING,
amount NUMERIC,
transaction_currency STRING
);
INSERT INTO sales.sales_orders
(id, last_modified_timestamp, customer_id, item_id, amount, transaction_currency)
VALUES
("order1",CURRENT_TIMESTAMP(),"customer1","ASDWQ123456789012345",100,"USD"),
("order1",CURRENT_TIMESTAMP(),"customer2","bad_item_id",-10,"XXX"),
("order2",CURRENT_TIMESTAMP(),"customer3","INTNL987654321098765",50,"GBP"),
("order3",CURRENT_TIMESTAMP(),"customer4","INTNL932716428593847",50,"GBP")
Beispiel 1
Im folgenden Codebeispiel werden Datenqualitätsprüfungen zum Validieren dieser Werte erstellt:
amount
: Werte sind Null oder positive Zahlen.item_id
: Ein alphanumerischer String mit 5 alphabetischen Zeichen, gefolgt von 15 Ziffern.transaction_currency
: Ein zulässiger Währungstyp, wie durch eine statische Liste definiert. In dieser statischen Beispielliste werden als Währungstypen GBP und JPY erlaubt. Diese Validierung gilt nur für Zeilen, die als international markiert sind.
# The following `NONE` row filter is required.
row_filters:
NONE:
filter_sql_expr: |-
True
# This filters for rows marked as international (INTNL).
INTERNATIONAL_ITEMS:
filter_sql_expr: |-
REGEXP_CONTAINS(item_id, 'INTNL')
# Rule dimensions are optional but let you aggregate reporting.
rule_dimensions:
- consistency
- correctness
- duplication
- completeness
- conformance
- integrity
# Rules can apply to multiple tables or columns.
rules:
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
dimension: correctness
params:
custom_sql_expr: |-
$column >= 0
VALID_ITEM_ID:
rule_type: REGEX
dimension: conformance
params:
pattern: |-
[A-Z]{5}[0-9]{15}
VALID_CURRENCY_ID:
rule_type: CUSTOM_SQL_EXPR
dimension: integrity
params:
custom_sql_expr: |-
$column in ('GBP', 'JPY')
# Rule bindings associate rules to columns within tables.
rule_bindings:
TRANSACTION_AMOUNT_VALID:
entity_uri: bigquery://projects/PROJECT_ID/datasets/DATASET_ID/tables/sales_orders
column_id: amount
row_filter_id: NONE
rule_ids:
- VALUE_ZERO_OR_POSITIVE
TRANSACTION_VALID_ITEM_ID:
entity_uri: bigquery://projects/PROJECT_ID/datasets/DATASET_ID/tables/sales_orders
column_id: item_id
row_filter_id: NONE
rule_ids:
- VALID_ITEM_ID
TRANSACTION_CURRENCY_VALID:
entity_uri: bigquery://projects/PROJECT_ID/datasets/DATASET_ID/tables/sales_orders
column_id: transaction_currency
row_filter_id: INTERNATIONAL_ITEMS
rule_ids:
- VALID_CURRENCY_ID
Ersetzen Sie Folgendes:
PROJECT_ID
: Ihre Projekt-ID.DATASET_ID
: Die Dataset-ID.
Sample 2
Wenn die zu prüfende Tabelle Teil eines Dataplex-Lakes ist, können Sie die Tabellen mithilfe der Lake- oder Zonennotation angeben. So können Sie Ihre Ergebnisse nach See oder Zone zusammenfassen. Sie können beispielsweise einen Wert auf Zonenebene generieren.
Wenn Sie dieses Beispiel verwenden möchten, erstellen Sie einen Dataplex-Lake mit der Lake-ID operations
und der Zonen-ID procurement
. Fügen Sie dann die Tabelle sales_orders
als Asset der Zone hinzu.
# This is a convenience section that allows you to shorten the entity_uri
metadata_registry_defaults:
dataplex:
projects: PROJECT_ID
locations: REGION_ID
lakes: operations
zones: procurement
# You have to define a NONE row filter
row_filters:
NONE:
filter_sql_expr: |-
True
INTERNATIONAL_ITEMS:
filter_sql_expr: |-
REGEXP_CONTAINS(item_id, 'INTNL')
# rule dimensions are optional but allow you to aggregate reporting.
rule_dimensions:
- consistency
- correctness
- duplication
- completeness
- conformance
- integrity
# Rules can be shared across tables or columns.
rules:
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
dimension: correctness
params:
custom_sql_expr: |-
$column >= 0
VALID_ITEM_ID:
rule_type: REGEX
dimension: conformance
params:
pattern: |-
[A-Z]{5}[0-9]{15}
VALID_CURRENCY_ID:
rule_type: CUSTOM_SQL_EXPR
dimension: integrity
params:
custom_sql_expr: |-
$column in ('GBP', 'JPY')
#rule bindings associate rules to {table, column}
rule_bindings:
TRANSACTION_AMOUNT_VALID:
entity_uri: dataplex://projects/PROJECT_ID/locations/REGION_ID/lakes/operations/zones/procurement/entities/sales_orders
column_id: amount
row_filter_id: NONE
rule_ids:
- VALUE_ZERO_OR_POSITIVE
TRANSACTION_VALID_ITEM_ID:
entity_uri: dataplex://zones/procurement/entities/sales_orders # omitting projects/locations/lakes from uri path to use the default values specified in metadata_registry_defaults
column_id: item_id
row_filter_id: NONE
rule_ids:
- VALID_ITEM_ID
TRANSACTION_CURRENCY_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: transaction_currency
row_filter_id: INTERNATIONAL_ITEMS
rule_ids:
- VALID_CURRENCY_ID
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- REGION_ID: Die Regions-ID des Dataplex-Lakes, in dem sich die Tabelle befindet, z. B.
us-central1
.
Beispiel 3
In diesem Beispiel wird Beispiel 2 durch eine benutzerdefinierte SQL-Prüfung ergänzt, um zu sehen, ob die ID-Werte eindeutig sind.
# This is a convenience section that allows you to shorten the entity_uri
metadata_registry_defaults:
dataplex:
projects: PROJECT_ID
locations: REGION_ID
lakes: operations
zones: procurement
# You have to define a NONE row filter
row_filters:
NONE:
filter_sql_expr: |-
True
INTERNATIONAL_ITEMS:
filter_sql_expr: |-
REGEXP_CONTAINS(item_id, 'INTNL')
# rule dimensions are optional but allow you to aggregate reporting.
rule_dimensions:
- consistency
- correctness
- duplication
- completeness
- conformance
- integrity
# Rules can be shared across tables or columns.
rules:
# This rule is parameterized with column_names as parameter
NO_DUPLICATES_IN_COLUMN_GROUPS:
rule_type: CUSTOM_SQL_STATEMENT
dimension: duplication
params:
custom_sql_arguments:
- column_names
custom_sql_statement: |-
select a.*
from data a
inner join (
select
$column_names
from data
group by $column_names
having count(*) > 1
) duplicates
using ($column_names)
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
dimension: correctness
params:
custom_sql_expr: |-
$column >= 0
VALID_ITEM_ID:
rule_type: REGEX
dimension: conformance
params:
pattern: |-
[A-Z]{5}[0-9]{15}
VALID_CURRENCY_ID:
rule_type: CUSTOM_SQL_EXPR
dimension: integrity
params:
custom_sql_expr: |-
$column in ('GBP', 'JPY')
#rule bindings associate rules to {table, column}
rule_bindings:
TRANSACTIONS_UNIQUE:
entity_uri: dataplex://projects/PROJECT_ID/locations/REGION_ID/lakes/operations/zones/procurement/entities/sales_orders
column_id: id
row_filter_id: NONE
rule_ids:
- NO_DUPLICATES_IN_COLUMN_GROUPS:
column_names: "id"
TRANSACTION_AMOUNT_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders # omitting projects/locations/lakes from uri path to use the default values specified in metadata_registry_defaults
column_id: amount
row_filter_id: NONE
rule_ids:
- VALUE_ZERO_OR_POSITIVE
TRANSACTION_VALID_ITEM_ID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: item_id
row_filter_id: NONE
rule_ids:
- VALID_ITEM_ID
TRANSACTION_CURRENCY_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: transaction_currency
row_filter_id: INTERNATIONAL_ITEMS
rule_ids:
- VALID_CURRENCY_ID
Beispiel 4
In diesem Beispiel wird Beispiel 3 durch inkrementelle Validierungen mithilfe der Spalte last_modified_timestamp
erweitert. Sie können einer oder mehreren Regelbindungen zusätzliche Validierungen hinzufügen.
# This is a convenience section that allows you to shorten the entity_uri
metadata_registry_defaults:
dataplex:
projects: PROJECT_ID
locations: REGION_ID
lakes: operations
zones: procurement
# You have to define a NONE row filter
row_filters:
NONE:
filter_sql_expr: |-
True
INTERNATIONAL_ITEMS:
filter_sql_expr: |-
REGEXP_CONTAINS(item_id, 'INTNL')
# rule dimensions are optional but allow you to aggregate reporting.
rule_dimensions:
- consistency
- correctness
- duplication
- completeness
- conformance
- integrity
# Rules can be shared across tables or columns.
rules:
# This rule is parameterized with column_names as parameter
NO_DUPLICATES_IN_COLUMN_GROUPS:
rule_type: CUSTOM_SQL_STATEMENT
dimension: duplication
params:
custom_sql_arguments:
- column_names
custom_sql_statement: |-
select a.*
from data a
inner join (
select
$column_names
from data
group by $column_names
having count(*) > 1
) duplicates
using ($column_names)
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
dimension: correctness
params:
custom_sql_expr: |-
$column >= 0
VALID_ITEM_ID:
rule_type: REGEX
dimension: conformance
params:
pattern: |-
[A-Z]{5}[0-9]{15}
VALID_CURRENCY_ID:
rule_type: CUSTOM_SQL_EXPR
dimension: integrity
params:
custom_sql_expr: |-
$column in ('GBP', 'JPY')
#rule bindings associate rules to {table, column}
rule_bindings:
TRANSACTIONS_UNIQUE:
entity_uri: dataplex://projects/PROJECT_ID/locations/REGION_ID/lakes/operations/zones/procurement/entities/sales_orders
column_id: id
row_filter_id: NONE
incremental_time_filter_column_id: last_modified_timestamp
rule_ids:
- NO_DUPLICATES_IN_COLUMN_GROUPS:
column_names: "id"
TRANSACTION_AMOUNT_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders # omitting projects/locations/lakes from uri path to use the default values specified in metadata_registry_defaults
column_id: amount
row_filter_id: NONE
incremental_time_filter_column_id: last_modified_timestamp
rule_ids:
- VALUE_ZERO_OR_POSITIVE
TRANSACTION_VALID_ITEM_ID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: item_id
row_filter_id: NONE
incremental_time_filter_column_id: last_modified_timestamp
rule_ids:
- VALID_ITEM_ID
TRANSACTION_CURRENCY_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: transaction_currency
row_filter_id: INTERNATIONAL_ITEMS
incremental_time_filter_column_id: last_modified_timestamp
rule_ids:
- VALID_CURRENCY_ID
Fehlerbehebung bei fehlgeschlagenen Regeln mit failed_records_query
Für jede Regel, die fehlschlägt, wird in der Zusammenfassungstabelle in der Spalte failed_records_query
eine Abfrage gespeichert, mit der Sie fehlgeschlagene Datensätze abrufen können.
Zum Debuggen können Sie auch reference columns
in Ihrer YAML-Datei verwenden. So können Sie die Ausgabe von failed_records_query
mit den ursprünglichen Daten zusammenführen, um den gesamten Datensatz zu erhalten. Sie können beispielsweise eine primary_key
-Spalte oder eine zusammengesetzte primary_key
-Spalte als Referenzspalte angeben.
Referenzspalten angeben
Wenn Sie Referenzspalten generieren möchten, können Sie Ihrer YAML-Spezifikation Folgendes hinzufügen:
Der Abschnitt
reference_columns
. In diesem Abschnitt können Sie einen oder mehrere Referenzspaltensätze erstellen, wobei jeder Satz eine oder mehrere Spalten angibt.Der Abschnitt
rule_bindings
. In diesem Abschnitt können Sie einer Regelbindung eine Zeile hinzufügen, in der eine Referenzspalte-ID (reference_columns_id
) für die Regeln in dieser Regelbindung angegeben wird. Es sollte einer der im Abschnittreference_columns
angegebenen Referenzspaltensatze sein.
In der folgenden YAML-Datei wird beispielsweise ein Abschnitt reference_columns
angegeben und drei Spalten definiert: id
, last_modified_timestamp
und item_id
als Teil des Satzes ORDER_DETAILS_REFERENCE_COLUMNS
. Im folgenden Beispiel wird die Beispieltabelle sales_orders
verwendet.
reference_columns:
ORDER_DETAILS_REFERENCE_COLUMNS:
include_reference_columns:
- id
- last_modified_timestamp
- item_id
rules:
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
params:
custom_sql_expr: |-
row_filters:
NONE:
filter_sql_expr: |-
True
rule_bindings:
TRANSACTION_AMOUNT_VALID:
entity_uri: bigquery://projects/PROJECT_ID/datasets/DATASET_ID/tables/sales_orders
column_id: amount
row_filter_id: NONE
reference_columns_id: ORDER_DETAILS_REFERENCE_COLUMNS
rule_ids:
- VALUE_ZERO_OR_POSITIVE
Abfrage für fehlgeschlagene Einträge verwenden
Die Abfrage für fehlgeschlagene Datensätze generiert eine Zeile für jeden Datensatz, für den eine Regel fehlgeschlagen ist. Sie enthält den Namen der Spalte, durch den der Fehler ausgelöst wurde, den Wert, durch den der Fehler ausgelöst wurde, und die Werte für die Referenzspalten. Außerdem enthält sie Metadaten, mit denen Sie sich auf die Ausführung der Datenqualitätsaufgabe beziehen können.
Im Folgenden finden Sie ein Beispiel für die Ausgabe einer fehlgeschlagenen Abfrage für die YAML-Datei, die unter Referenzspalten angeben beschrieben wurde. Es wird ein Fehler für Spalte amount
und der Fehlerwert -10
angezeigt. Außerdem wird der entsprechende Wert für die Referenzspalte erfasst.
_dq_validation_invocation_id | _dq_validation_rule_binding_id | _dq_validation_rule_id | _dq_validation_column_id | _dq_validation_column_value | _dq_validation_dimension | _dq_validation_simple_rule_row_is_valid | _dq_validation_complex_rule_validation_errors_count | _dq_validation_complex_rule_validation_success_flag | id | last_modified_timestamp | item_id |
---|---|---|---|---|---|---|---|---|---|---|---|
10a25be9-8dfa-446c-a42c-75f6bb4a49d9 | TRANSACTION_AMOUNT_VALID | VALUE_ZERO_OR_POSITIVE | Menge | -10 | FALSE | order1 | 2022-01-22T02:30:06.321Z | bad_item_id |
Abfragen von fehlgeschlagenen Datensätzen für CUSTOM_SQL_STATEMENT-Regeln verwenden
Bei CUSTOM_SQL_STATEMENT
-Regeln enthalten fehlgeschlagene Datensatzabfragen die custom_sql_statement_validation_errors
-Spalte. Die custom_sql_statement_validation_errors
-Spalte ist eine verschachtelte Spalte mit Feldern, die der Ausgabe Ihrer SQL-Anweisung entsprechen. Referenzspalten sind nicht Teil der fehlgeschlagenen Datensatzabfragen für CUSTOM_SQL_STATEMENT
-Regeln.
Ihre CUSTOM_SQL_STATEMENT
-Regel könnte beispielsweise so aussehen:
rules: TEST_RULE: rule_type: CUSTOM_SQL_STATEMENT custom_sql_arguments: - existing_id - replacement_id params: CUSTOM_SQL_STATEMENT: |- (SELECT product_name, product_key FROM data where $existing_id != $replacement_id)
custom_sql_statement_validation_errors
, eine Zeile für jedes Vorkommen von existing_id!=replacement_id
.
In JSON-Darstellung könnte der Inhalt einer Zelle in dieser Spalte so aussehen:
{ "custom_sql_statement_valdation_errors" :{ "product_name"="abc" "product_key"="12345678" "_rule_binding_id"="your_rule_binding" } }
Sie können diese Ergebnisse mit einer verschachtelten Referenz wie join on custom_sql_statement_valdation_errors.product_key
mit der ursprünglichen Tabelle verknüpfen.
Nächste Schritte
- Weitere Informationen finden Sie in der Referenz zur CloudDQ-YAML-Spezifikation.
- Beispiele für Datenqualitätsregeln finden Sie unter Einfache Regeln und Erweiterte Regeln.
- Weitere Informationen finden Sie unter Beispiel-Airflow-DAG für Dataplex-Datenqualitätsaufgaben.