Fehlerbehebung in Dataform

In diesem Dokument wird beschrieben, wie Sie Probleme mit Dataform beheben.

Zugriff auf BigQuery verweigert

Der folgende Fehler tritt auf, wenn Sie eine Pipeline-Invocation auslösen, bevor Sie Dataform Zugriff auf BigQuery gewähren:

Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.

Gewähren Sie Dataform Zugriff auf BigQuery, um diesen Fehler zu beheben.

Zugriffstoken für ein Remote-Repository wird abgelehnt

Der folgende Fehler tritt auf, wenn Ihr Authentifizierungstoken für ein verbundenes Drittanbieter-Repository keinen Zugriff auf dieses Repository hat:

The access token for remote repository REPOSITORY_NAME was rejected

Prüfen Sie die erforderlichen Berechtigungen bei Ihrem Git-Anbieter und aktualisieren Sie das Secret Manager-Authentifizierungstoken entsprechend, um diesen Fehler zu beheben. Weitere Informationen zur Authentifizierung von Git-Repositories von Drittanbietern in Dataform finden Sie unter Mit einem Git-Repository eines Drittanbieters verbinden.

Limit für die gleichzeitige Ausführung von BigQuery-Abfragen überschritten

Der folgende Fehler tritt auf, wenn die Anzahl der gleichzeitigen Abfragen, die für BigQuery ausgeführt werden, das Limit für die gleichzeitige Ausführung von BigQuery-Abfragen überschreitet:

Exceeded rate limits: too many concurrent queries for this project_and_region

Um diesen Fehler zu beheben, reduzieren Sie die Anzahl der parallelen Abfragen auf weniger als 250. Dazu haben Sie folgende Möglichkeiten:

Eine Anleitung zum Beheben dieses Fehlers in BigQuery finden Sie unter Fehler bei Kontingenten und Limits beheben.

BigQuery-Kontingent überschritten

Der folgende Fehler tritt auf, wenn die Anzahl der API-Anfragen, die Dataform an BigQuery sendet, das BigQuery-Kontingent überschreitet:

Quota exceeded: Your user_method exceeded quota for concurrent api requests
per user per method.

Um diesen Fehler zu beheben, reduzieren Sie die Anzahl der parallelen Abfragen auf weniger als 250. Dazu haben Sie folgende Möglichkeiten:

Eine Anleitung zum Beheben dieses Fehlers in BigQuery finden Sie unter Fehler bei Kontingenten und Limits beheben.

Fehler bei der Pipeline-Invocation in BigQuery

Die folgenden Fehler treten bei der Ausführung eines Workflows für BigQuery auf:

Informationen zum Beheben dieser Fehler finden Sie unter BigQuery-Fehler meldungen.

Kompilierung schlägt fehl

Die folgenden Fehler treten bei der Kompilierung aufgrund der Größe oder Anzahl der kompilierten Abfragen auf:

  • Compilation timed out. Reduce the complexity of your project to ensure it can compile within limits.
  • Compilation exceeded its allowed heap memory limits. Reduce the complexity of your project to ensure it can compile within limits.
  • Compilation exceeded its allowed ArrayBuffer or string memory limits. Reduce the complexity of your project to ensure it can compile within limits.

So beheben Sie diese Fehler:

  1. Aktualisieren Sie Dataform Core auf die neueste Version.
  2. Prüfen Sie Ihren Workflow, um Ineffizienzen zu erkennen und zu reduzieren.
  3. Reduzieren Sie die Größe von SQL-Abfragen.
  4. Reduzieren Sie die Anzahl der JavaScript-Vorgänge im Arbeitsspeicher, z. B.:

    config { config {type: "table" }}
    js {
        const tooBig = new Uint8Array(110_000_000);
    }
    SELECT ...
    
  5. Teilen Sie das Repository auf.

Weitere Informationen zu den Ressourcenlimits für die Dataform-Kompilierung finden Sie unter Kontingente und Limits.

Konfliktierende includeDependentAssertions-Attribute

Der folgende Fehler tritt bei der Kompilierung auf, wenn der Parameter includeDependentAssertions für dieselbe Aktion mit unterschiedlichen Werten in einer Datei festgelegt ist:

Conflicting "includeDependentAssertions" properties are not allowed. Dependency
dependencyName has different values set for this property.

Bearbeiten Sie die Datei und entfernen Sie die widersprüchlichen Wiederholungen des Parameters includeDependentAssertions, um diesen Fehler zu beheben.

Weitere Informationen zum Festlegen von Assertions als Abhängigkeiten mit dem includeDependentAssertions Parameter finden Sie unter Assertions einer ausgewählten Aktion als Abhängigkeiten festlegen.

Anhängen eines projektübergreifenden Dienstkontos blockiert

Der folgende Fehler tritt auf, wenn Sie versuchen, ein benutzerdefiniertes Dienstkonto aus einem anderen Projekt als Ihrem Dataform-Repository zu verwenden, und der Vorgang durch eine Einschränkung der Organisationsrichtlinie blockiert wird:

The caller does not have permission to act as service account: SERVICE_ACCOUNT_EMAIL

So beheben Sie diesen Fehler:

  1. Ermitteln Sie das Google Cloud Projekt, in dem sich das benutzerdefinierte Dienstkonto befindet.
  2. Deaktivieren Sie in diesem Projekt die Einschränkung der Organisationsrichtlinie iam.disableCrossProjectServiceAccountUsage. Weitere Informationen finden Sie unter Ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können.
  3. Prüfen Sie, ob das aufrufende Hauptkonto die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für das benutzerdefinierte Dienstkonto hat.

Weitere Informationen finden Sie unter Anhängen von projektübergreifenden Dienstkonten verwalten.

@dataform/core-Abhängigkeitsfehler

Die folgenden Fehler treten bei der Kompilierung auf, wenn die dataform-core-Abhängigkeit in package.json veraltet ist:

Failed to resolve @dataform/core
@dataform/core version should be X.X.X or newer

Die Abhängigkeit @dataform/core ist in package.json erforderlich. Wenn Sie den ersten Arbeitsbereich in Ihrem Repository initialisieren, wird package.json von Dataform automatisch mit der aktuellen Version von @dataform/core gefüllt. Sie müssen @dataform/core immer auf die neueste Version aktualisieren.

Aktualisieren Sie @dataform/core auf die neueste Version, um diese Fehler zu beheben.

Berechtigung für Anmeldedaten von Endnutzern verweigert

Der folgende Fehler tritt auf, wenn Sie Ihre Arbeitslast mit Anmeldedaten für ein Google-Konto ausführen, Dataform aber nicht die erforderlichen Berechtigungen hat:

Dataform does not have the necessary permissions to run your workload using end user credentials. Error details: Account restricted: https://accounts.google.com/info/servicerestricted?...

Dieser Fehler kann auftreten, wenn Ihre Organisation Regeln für den kontextsensitiven Zugriff verwendet, die den Zugriff auf Google Cloud Dienste basierend auf der Nutzeridentität und dem Kontext einschränken.

Um diesen Fehler zu beheben, müssen Sie möglicherweise Ihre Kontextsensitiver Zugriff-Konfiguration aktualisieren, damit Dataform Anmeldedaten für Google-Konten verwenden kann. Dazu müssen Sie die OAuth-Client-ID von Dataform in Ihrer Zugriffsebenenkonfiguration ausnehmen. Weitere Informationen zum Ausnehmen von Anwendungen finden Sie unter Zugriffsebenen für unterstützte Anwendungen konfigurieren.

Die OAuth-Client-ID für Dataform erhalten Sie vom Cloud Customer Care.

dataform.json kann nicht aufgelöst werden

Der folgende Fehler tritt auf, wenn Sie einen Dataform-Arbeitsbereich initialisieren, aber bei der Initialisierung nicht alle Pakete installiert werden können:

Uncaught Error: Failed to resolve dataform.json

Öffnen Sie package.json in Ihrem Arbeitsbereich und klicken Sie auf Pakete installieren , um diesen Fehler zu beheben.

workflow_settings.yaml kann nicht aufgelöst werden

Der folgende Fehler tritt auf, wenn Sie einen Dataform-Arbeitsbereich initialisieren, aber bei der Initialisierung nicht alle Pakete installiert werden können:

Uncaught Error: Failed to resolve workflow_settings.yaml

Öffnen Sie workflow_settings.yaml in Ihrem Arbeitsbereich und klicken Sie auf Pakete installieren , um diesen Fehler zu beheben.

git+-Paketziele werden nicht unterstützt

Der folgende Fehler tritt auf, wenn Sie Pakete in package.json mit Zielen definieren, die mit git+ beginnen:

'git+' prefixed package targets are not currently supported. However,
in most cases they can be used via a '.tar.gz' suffixed target instead.

Dataform unterstützt keine Paketziele, die mit git+ beginnen.

Generieren Sie eine tar.gz-URL des Pakets und aktualisieren Sie das Paketziel in package.json, um diesen Fehler zu beheben. Weitere Informationen zum Installieren von Paketen in Dataform finden Sie unter Paket installieren.

Zeitüberschreitung bei der Paketinstallation

Der folgende Fehler tritt auf, wenn die Größe der in package.json definierten Pakete die maximale Größe von NPM-Abhängigkeiten überschreitet:

API request error: Package installation timed out

Entfernen Sie redundante Pakete aus package.json, um diesen Fehler zu beheben. Achten Sie darauf, dass die Datei package.json nicht @dataform/cli enthält und die Gesamtgröße der definierten NPM-Abhängigkeiten 200 MB nicht überschreitet.

Wenn Ihre Releasekonfigurationen auf Git-Commitishes verweisen, prüfen Sie, ob die package.json Dateien an den Zielen gültig sind.

Berechtigung zum Handeln als Dienstkonto verweigert

Der folgende Fehler tritt auf, wenn das Hauptkonto, das die Aktion ausführt, nicht die Berechtigung iam.serviceAccounts.actAs für das effektive Dienstkonto hat:

Permission denied: Principal CALLER_EMAIL is missing 'iam.serviceAccounts.actAs' permission on service account SERVICE_ACCOUNT_EMAIL.

Dieser Fehler kann bei den folgenden Aktionen auftreten:

  • Repository erstellen oder aktualisieren
  • Workflowkonfiguration erstellen oder aktualisieren
  • Workflow-Invocation erstellen
  • Releasekonfiguration aktualisieren

Weisen Sie dem Hauptkonto die Rolle „ Dienstkontonutzer “ (roles/iam.serviceAccountUser) für das effektive Dienstkonto zu, um diesen Fehler zu beheben. Weitere Informationen finden Sie unter Erforderliche IAM-Rollen zuweisen.

Private Paketregistrierung kann nicht erreicht werden

Der folgende Fehler tritt auf, wenn die Dataform-Authentifizierung für ein privates Paket abläuft:

Permission denied when fetching one or more npm packages. Please verify that
private registry authentication details are valid for each npm registry

Prüfen Sie, ob die Authentifizierungsdetails für die private Registrierung für jede NPM-Registrierung gültig sind, um diesen Fehler zu beheben. Weitere Informationen finden Sie unter Privates Paket authentifizieren.

Remote-Repository kann nicht erreicht werden

Einer der folgenden Fehler tritt auf, wenn Dataform keine Verbindung zu Ihrem Remote-Git-Repository herstellen kann:

Remote repository 'REMOTE_REPOSITORY_URL' could not be reached.
Error during remote operation: SSH connection to remote repository 'REMOTE_REPOSITORY_URL' timed out.
Error during remote operation: `Read timed out`.
Error during remote operation: `Connection time out`.
Error during remote operation: The remote repository 'REMOTE_REPOSITORY_URL' closed connection during remote operation.

Wie Sie diese Verbindungsfehler beheben, hängt davon ab, ob der Fehler dauerhaft oder vorübergehend ist.

Dauerhafte Verbindungsfehler

Wenn der Fehler bei jedem Kompilierungsversuch oder bei der ersten Einrichtung des Repositorys auftritt, ist der Verbindungsfehler dauerhaft. Die Verbindung ist nicht richtig konfiguriert oder die Anmeldedaten sind abgelaufen. So beheben Sie diesen Fehler:

  1. Prüfen Sie, ob der Host Ihres Git-Repositorys über das öffentliche Internet erreichbar ist.
  2. Wenn Ihr Remote-Git-Repository nicht über das öffentliche Internet erreichbar ist, verwenden Sie Developer Connect, um eine sichere Verbindung von Dataform aus herzustellen.
  3. Prüfen Sie, ob Ihr Authentifizierungstoken oder Ihre SSH-Schlüssel gültig sind, nicht abgelaufen sind und Zugriff auf das Repository haben.
  4. Führen Sie alle Schritte unter Mit einem Git-Repository eines Drittanbieters verbinden aus.

Vorübergehende oder zeitweise Verbindungsfehler

Wenn der Fehler sporadisch bei geplanten Ausführungen oder beim gleichzeitigen Auslösen mehrerer Workflows auftritt, ist der Verbindungsfehler vorübergehend. Ihre externe Netzwerkverbindung zum Remote-Repository ist möglicherweise vorübergehend unzuverlässig.

Beachten Sie die folgenden Best Practices, um die Zuverlässigkeit der Produktion zu optimieren und vorübergehende Verbindungsfehler zu vermeiden:

  1. Häufige Commitish-Kompilierungen in der Produktion vermeiden: Wenn Sie CreateCompilationResult direkt für einen Git-Commitish wie main oder ein bestimmtes Git-Tag aufrufen, muss Dataform bei jeder Ausführung einen neuen Git-Klon erstellen und Pakete über das Netzwerk installieren. Häufige Commitish-Kompilierungen in mehreren Pipelines erhöhen die Abhängigkeit vom externen Netzwerk und die Ausführungslatenz.
  2. Releasekonfigurationen verwenden: Verwenden Sie für die Produktionsausführung Releasekonfigurationen. Bei einer Releasekonfiguration wird Ihr Repository nach einem kontrollierten Zeitplan kompiliert und das unveränderliche Kompilierungsergebnis wird gespeichert. Nachfolgende Workflow-Ausführungen verwenden dieses im Cache gespeicherte Ergebnis sofort, ohne Ihr externes Git-Repository abzufragen.
  3. Geplante Ausführungen staffeln: Wenn Sie mehrere Kompilierungen oder Release-Trigger planen, staffeln Sie die Cron-Zeitpläne, um die Netzwerklast zu verteteilen. Verschieben Sie die Zeitpläne beispielsweise um 5 bis 10 Minuten, anstatt alle Jobs gleichzeitig auszuführen.
  4. Wiederholungen in Orchestrierungs-Workflows hinzufügen: Wenn Sie Dataform-Kompilierungen über externe Planer wie Managed Service for Apache Airflow orchestrieren, konfigurieren Sie automatische Wiederholungen mit exponentiellem Backoff für Ihren Operator, um vorübergehende Netzwerkunzuverlässigkeiten zu beheben. Konfigurieren Sie beispielsweise in einem Airflow-DAG mit DataformCreateCompilationResultOperator Wiederholungen so:
from datetime import timedelta
from airflow.providers.google.cloud.operators.dataform import (
    DataformCreateCompilationResultOperator,
)

create_compilation_result = DataformCreateCompilationResultOperator(
    task_id="create_compilation_result",
    project_id="PROJECT_ID",
    region="REGION",
    repository_id="REPOSITORY_ID",
    compilation_result={
        "git_commitish": "GIT_COMMITISH",
    },
    retries=5,
    retry_delay=timedelta(minutes=2),
    retry_exponential_backoff=True,
)

Repositories in Dataform nicht sichtbar

Einige Dataform-Repositories werden möglicherweise in Cloud Asset Inventory-Suchanfragen oder IAM-Berechtigungsprüfungen angezeigt, aber nicht in Dataform in der Google Cloud Console.

Informationen zum Ermitteln des Ursprungs dieser Repositories mithilfe von Labels finden Sie unter Repositories für BigQuery-Assets identifizieren.

Secret für ein Remote-Repository ist nicht zugänglich

Der folgende Fehler tritt auf, wenn der Dataform-Dienst-Agent nicht auf Ihr Secret Manager-Secret für ein verbundenes Drittanbieter-Repository zugreifen kann:

Dataform's service account is unable to reach the configured secret.
Make sure the secret exists and is shared with your Dataform service account:
SERVICE_ACCOUNT_ID.

Prüfen Sie, ob der Dataform-Dienst-Agent Zugriff auf das Secret hat, um diesen Fehler zu beheben.

Dienstkonto im Drop-down-Menü nicht sichtbar

Beim Konfigurieren eines Repositorys oder einer Workflow-Invocation wird im Menü Dienstkonto möglicherweise kein vorhandenes benutzerdefiniertes Dienstkonto aufgeführt.

Dataform verwendet die Identity and Access Management API, um Dienstkonten aufzulisten. Dazu ist die Berechtigung iam.serviceAccounts.list auf Projektebene erforderlich.

Führen Sie einen der folgenden Schritte aus, um das Problem zu lösen:

  • Klicken Sie auf Manuell eingeben und geben Sie die Dienstkonto-ID ein.
  • Bitten Sie Ihren Projektadministrator, Ihnen die Rolle „Dienstkonto-Betrachter“ (roles/iam.serviceAccountViewer) oder eine andere Rolle mit der iam.serviceAccounts.list Berechtigung für das Projekt zuzuweisen.

Unbekanntes Argument: Tags

Der folgende Fehler tritt auf, wenn Ihre Version der Dataform CLI das tags Argument nicht erkennt:

Unknown argument: tags

So beheben Sie diesen Fehler:

  • Aktualisieren Sie die Version der CLI auf 3.0.0 oder höher. Testen Sie neue Paketversionen immer in einer Nicht-Produktionsumgebung, bevor Sie sie in Ihrer Produktionsumgebung bereitstellen.
  • Verwenden Sie immer die neueste verfügbare Version des Dataform Core-Pakets.
  • Geben Sie die Paketversion explizit in package.json an, z. B. 3.0.0. Verwenden Sie keine anderen dependencies Optionen von package.json, z. B. >version.