Résoudre les problèmes liés à Dataform

Ce document explique comment résoudre les problèmes liés à Dataform.

L'accès à BigQuery est refusé

L'erreur suivante se produit lorsque vous déclenchez l'appel d'un pipeline avant d'accorder à Dataform l'accès à BigQuery :

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

Pour résoudre cette erreur, accordez à Dataform l'accès à BigQuery.

Le jeton d'accès à un dépôt distant est refusé

L'erreur suivante se produit lorsque votre jeton d'authentification pour un dépôt tiers connecté n'a pas accès à ce dépôt :

The access token for remote repository REPOSITORY_NAME was rejected

Pour résoudre cette erreur, vérifiez les autorisations requises dans votre fournisseur Git et mettez à jour le jeton d'authentification Secret Manager en conséquence. Pour en savoir plus sur l'authentification des dépôts Git tiers dans Dataform, consultez Se connecter à un dépôt Git tiers.

La connexion Secure Source Manager ne dispose pas du proxy Developer Connect

L'erreur suivante se produit lorsque vous associez un dépôt Dataform à un dépôt Secure Source Manager (preview) à l'aide d'une connexion Developer Connect pour laquelle le proxy n'est pas activé :

This repository uses a Secure Source Manager connection that does not have the Developer Connect proxy enabled. Dataform cannot access it. Select a different repository, or link a new repository using a connection with the proxy enabled.

Pour résoudre cette erreur, sélectionnez un autre dépôt, associez-en un nouveau à l'aide d'une connexion avec le proxy activé ou mettez à jour la connexion Developer Connect existante pour activer le proxy. Pour en savoir plus, consultez Connecter un dépôt distant à l'aide de Developer Connect.

La limite de simultanéité des requêtes BigQuery est dépassée

L'erreur suivante se produit lorsque le nombre de requêtes simultanées exécutées dans BigQuery dépasse la limite de simultanéité des requêtes BigQuery :

Exceeded rate limits: too many concurrent queries for this project_and_region

Pour résoudre cette erreur, réduisez le nombre de requêtes parallèles à moins de 250 de l'une des manières suivantes :

Pour savoir comment résoudre cette erreur dans BigQuery, consultez Résoudre les erreurs de quota et de limite.

Le quota BigQuery est dépassé

L'erreur suivante se produit lorsque le nombre de requêtes API que Dataform envoie à BigQuery dépasse le quota BigQuery :

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

Pour résoudre cette erreur, réduisez le nombre de requêtes parallèles à moins de 250 de l'une des manières suivantes :

Pour savoir comment résoudre cette erreur dans BigQuery, consultez Résoudre les erreurs de quota et de limite.

Erreurs d'appel de pipeline BigQuery

Les erreurs suivantes se produisent lors de l'exécution d'un workflow vers BigQuery :

Pour résoudre ces erreurs, consultez Messages d'erreur BigQuery.

Échec de la compilation

Les erreurs suivantes se produisent lors de la compilation en raison de la taille ou du nombre de requêtes compilées :

  • 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.
  • Compilation cancelled because it exceeded size limits.

Pour résoudre ces erreurs, procédez comme suit :

  1. Mettez à jour Dataform Core vers la dernière version.
  2. Inspectez votre workflow pour identifier et réduire les inefficacités.
  3. Réduisez la taille des requêtes SQL.
  4. Réduisez le nombre d'opérations JavaScript en mémoire, par exemple :

    config { config {type: "table" }}
    js {
        const tooBig = new Uint8Array(110_000_000);
    }
    SELECT ...
    
  5. Divisez le dépôt.

Pour en savoir plus sur les limites de ressources de compilation Dataform, consultez Quotas et limites.

Propriétés includeDependentAssertions en conflit

L'erreur suivante se produit lors de la compilation lorsque le paramètre includeDependentAssertions est défini pour la même action avec des valeurs différentes dans un fichier :

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

Pour résoudre cette erreur, modifiez le fichier et supprimez les répétitions conflictuelles du paramètre includeDependentAssertions.

Pour en savoir plus sur l'utilisation du paramètre includeDependentAssertions pour définir des assertions en tant que dépendances, consultez Définir les assertions d'une action sélectionnée en tant que dépendances.

Le rattachement de compte de service multiprojet est bloqué

L'erreur suivante se produit lorsque vous tentez d'utiliser un compte de service personnalisé d'un projet différent de celui de votre dépôt Dataform, et que l'opération est bloquée par une contrainte de règle d'administration :

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

Pour résoudre cette erreur, procédez comme suit :

  1. Identifiez le projet Google Cloud dans lequel se trouve le compte de service personnalisé.
  2. Dans ce projet, désactivez la contrainte de règle d'administration iam.disableCrossProjectServiceAccountUsage. Pour en savoir plus, consultez Activer l'association des comptes de service à plusieurs projets.
  3. Assurez-vous que le compte principal de l'appelant dispose du rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) sur le compte de service personnalisé.

Pour en savoir plus, consultez Gérer l'association de comptes de service multiprojets.

@dataform/core erreur de dépendance

Les erreurs suivantes se produisent lors de la compilation si la dépendance dataform-core dans package.json est obsolète :

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

La dépendance @dataform/core est requise dans package.json. Lorsque vous initialisez le premier espace de travail de votre dépôt, Dataform renseigne automatiquement package.json avec la version actuelle de @dataform/core. Vous devez mettre à jour @dataform/core vers la dernière version dès qu'elle est disponible.

Pour résoudre ces erreurs, mettez à jour @dataform/core vers la dernière version.

Autorisation refusée pour les identifiants de l'utilisateur final

L'erreur suivante se produit lorsque vous exécutez votre charge de travail à l'aide des identifiants d'un compte Google, mais que Dataform ne dispose pas des autorisations nécessaires :

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

Cette erreur peut se produire si votre organisation utilise des règles d'accès contextuel qui limitent l'accès aux services Google Cloud en fonction de l'identité et du contexte de l'utilisateur.

Pour résoudre cette erreur, vous devrez peut-être mettre à jour votre configuration d'accès contextuel afin d'autoriser Dataform à utiliser les identifiants utilisateur du compte Google. Pour ce faire, vous devez exempter l'ID client OAuth de Dataform dans la configuration de votre niveau d'accès. Pour en savoir plus sur l'exclusion d'applications, consultez Configurer des niveaux d'accès pour les applications compatibles.

Pour obtenir l'ID client OAuth pour Dataform, contactez Cloud Customer Care.

Échec de la résolution de dataform.json

L'erreur suivante se produit lorsque vous initialisez un espace de travail Dataform, mais que le processus d'initialisation ne parvient pas à installer tous les packages :

Uncaught Error: Failed to resolve dataform.json

Pour résoudre cette erreur, ouvrez package.json dans votre espace de travail, puis cliquez sur Installer les packages.

Échec de la résolution de workflow_settings.yaml

L'erreur suivante se produit lorsque vous initialisez un espace de travail Dataform, mais que le processus d'initialisation ne parvient pas à installer tous les packages :

Uncaught Error: Failed to resolve workflow_settings.yaml

Pour résoudre cette erreur, ouvrez workflow_settings.yaml dans votre espace de travail, puis cliquez sur Installer les packages.

Les cibles de package git+ ne sont pas acceptées

L'erreur suivante se produit lorsque vous définissez des packages dans package.json avec des cibles précédées de git+ :

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

Dataform n'est pas compatible avec les cibles de package précédées de git+.

Pour résoudre cette erreur, générez une URL tar.gz du package et mettez à jour la cible du package dans package.json. Pour en savoir plus sur l'installation de packages dans Dataform, consultez Installer un package.

Le délai d'installation du package a expiré

L'erreur suivante se produit lorsque la taille des packages définis dans package.json dépasse la taille maximale des dépendances NPM :

API request error: Package installation timed out

Pour résoudre cette erreur, supprimez les packages redondants de package.json. Assurez-vous que le fichier package.json ne contient pas @dataform/cli et que la taille totale des dépendances NPM définies ne dépasse pas 200 Mo.

Si vos configurations de version font référence à des commitish Git, assurez-vous que les fichiers package.json de leurs cibles sont valides.

Autorisation refusée pour agir en tant que compte de service

L'erreur suivante se produit lorsque le compte principal effectuant l'action ne dispose pas de l'autorisation iam.serviceAccounts.actAs sur le compte de service effectif :

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

Cette erreur peut se produire lors des actions suivantes :

  • Créer ou mettre à jour un dépôt.
  • Créer ou mettre à jour une configuration de workflow.
  • Création d'une invocation de workflow.
  • Mettre à jour une configuration de version.

Pour résoudre cette erreur, attribuez le rôle d'utilisateur du compte de service (roles/iam.serviceAccountUser) au compte principal sur le compte de service effectif. Pour en savoir plus, consultez Attribuer les rôles IAM requis.

Impossible d'accéder au registre de packages privé

L'erreur suivante se produit lorsque l'authentification Dataform pour un package privé expire :

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

Pour résoudre cette erreur, vérifiez que les informations d'authentification du registre privé sont valides pour chaque registre NPM. Pour en savoir plus, consultez Authentifier un package privé.

Impossible d'accéder au dépôt distant

L'une des erreurs suivantes se produit lorsque Dataform ne peut pas se connecter à votre dépôt Git distant :

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.

La manière de résoudre ces erreurs de connexion dépend de la nature de l'échec (permanent ou temporaire).

Échecs de connexion permanents

Si l'erreur se produit systématiquement à chaque tentative de compilation ou lors de la configuration initiale du dépôt, l'échec de connexion est permanent. La connexion n'est pas configurée correctement ou les identifiants ont expiré. Pour résoudre cette erreur, procédez comme suit :

  1. Vérifiez que l'hôte de votre dépôt Git est accessible depuis l'Internet public.
  2. Si votre dépôt Git distant n'est pas accessible via l'Internet public, utilisez Developer Connect pour vous connecter de manière sécurisée depuis Dataform.
  3. Vérifiez que votre jeton d'authentification ou vos clés SSH sont valides, n'ont pas expiré et ont accès au dépôt.
  4. Suivez toutes les étapes de la section Se connecter à un dépôt Git tiers.

Échecs de connexion temporaires ou intermittents

Si l'erreur se produit de manière sporadique lors d'exécutions planifiées ou lorsque plusieurs workflows se déclenchent simultanément, l'échec de connexion est temporaire. Votre connexion réseau externe au dépôt distant est peut-être temporairement instable.

Pour optimiser la fiabilité de la production et éviter les erreurs de connexion temporaires, suivez ces bonnes pratiques :

  1. Évitez les compilations fréquentes de commitish en production : l'appel de CreateCompilationResult directement sur un commitish Git, tel que main ou un tag Git spécifique, nécessite que Dataform effectue un nouveau clone Git et installe des packages sur le réseau à chaque exécution. Le déclenchement de compilations commitish fréquentes sur plusieurs pipelines augmente la dépendance au réseau externe et la latence d'exécution.
  2. Utilisez des configurations de version : pour l'exécution en production, utilisez des configurations de version. Une configuration de version compile votre dépôt selon un calendrier contrôlé et enregistre le résultat de compilation immuable. Les exécutions de workflow en aval utilisent instantanément ce résultat mis en cache sans interroger votre dépôt Git externe.
  3. Échelonnez les exécutions planifiées : lorsque vous planifiez plusieurs compilations ou déclencheurs de version, échelonnez leurs planifications cron pour répartir la charge réseau. Par exemple, décalez les planifications de 5 à 10 minutes au lieu d'exécuter tous les jobs en même temps.
  4. Ajoutez des nouvelles tentatives dans les workflows d'orchestration : lorsque vous orchestrez des compilations Dataform à partir de programmateurs externes tels que Managed Service pour Apache Airflow, configurez des nouvelles tentatives automatiques avec un intervalle exponentiel entre les tentatives sur votre opérateur pour gérer de manière fluide les problèmes de fiabilité temporaires du réseau. Par exemple, dans un DAG Airflow utilisant DataformCreateCompilationResultOperator, configurez les nouvelles tentatives de la manière suivante :
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,
)

Dépôts non visibles dans Dataform

Certains dépôts Dataform peuvent apparaître dans les recherches de l'inventaire des éléments cloud ou dans les audits d'autorisations IAM, mais ils n'apparaissent pas dans Dataform dans la console Google Cloud .

Pour savoir comment identifier l'origine de ces dépôts à l'aide d'étiquettes, consultez Identifier les dépôts pour les éléments BigQuery.

Le secret d'un dépôt distant est inaccessible

L'erreur suivante se produit lorsque l'agent de service Dataform ne peut pas accéder à votre secret Secret Manager pour un dépôt tiers connecté :

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.

Pour résoudre cette erreur, vérifiez que l'agent de service Dataform a accès au secret.

Le compte de service n'est pas visible dans le menu déroulant

Lors de la configuration d'un dépôt ou d'un appel de workflow, il est possible que le menu Compte de service ne liste pas un compte de service personnalisé existant.

Dataform utilise l'API Identity and Access Management pour lister les comptes de service. Pour cela, vous devez disposer de l'autorisation iam.serviceAccounts.list au niveau du projet.

Pour résoudre ce problème, effectuez l'une des opérations suivantes :

  • Cliquez sur Saisir manuellement, puis saisissez l'ID du compte de service.
  • Demandez à l'administrateur de votre projet de vous accorder le rôle Afficher les comptes de service (roles/iam.serviceAccountViewer) ou un autre rôle incluant l'autorisation iam.serviceAccounts.list sur le projet.

Argument inconnu : tags

L'erreur suivante se produit lorsque votre version de la CLI Dataform ne reconnaît pas l'argument tags :

Unknown argument: tags

Pour résoudre cette erreur, procédez comme suit :

  • Mettez à jour la version de la CLI vers la version 3.0.0 ou une version ultérieure. Testez toujours les nouvelles versions de package dans un environnement hors production avant de les déployer dans votre environnement de production.
  • Il est recommandé de toujours utiliser la dernière version disponible du package Dataform Core.
  • Spécifiez explicitement la version du package dans package.json, par exemple 3.0.0. N'utilisez pas d'autres options dependencies de package.json, par exemple >version.