Ce document explique comment résoudre les problèmes liés à Dataform.
Accès à BigQuery refusé
L'erreur suivante se produit lorsque vous déclenchez un appel de 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.
Jeton d'accès à un dépôt distant 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 auprès de 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.
Limite de simultanéité des requêtes BigQuery 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 :
- Dans Dataform, catégorisez les actions avec des tags, et n'exécutez que les tags sélectionnés à la fois.
- Dans Dataform, introduisez des dépendances entre les actions.
- Dans Dataform, répartissez les exécutions d'actions entre différents Google Cloud projets.
Pour savoir comment résoudre cette erreur dans BigQuery, consultez Résoudre les erreurs de quota et de limite .
Quota BigQuery 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 :
- Dans Dataform, catégorisez les actions avec des tags, et n'exécutez que les tags sélectionnés à la fois.
- Dans Dataform, introduisez des dépendances entre les actions.
- Dans Dataform, répartissez les exécutions d'actions entre différents Google Cloud projets.
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 dans BigQuery :
- Erreurs d'appel de pipeline commençant par des messages d'erreur 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.
Pour résoudre ces erreurs, procédez comme suit :
- Mettez à jour Dataform Core vers la dernière version.
- Inspectez votre workflow pour identifier et réduire les inefficacités.
- Réduisez la taille des requêtes SQL.
Réduisez la quantité d'opérations JavaScript en mémoire, par exemple :
config { config {type: "table" }} js { const tooBig = new Uint8Array(110_000_000); } SELECT ...
Pour en savoir plus sur les limites de ressources de compilation Dataform, consultez Quotas et limites.
Propriétés includeDependentAssertions conflictuelles
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 même 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
afin de définir des assertions comme dépendances, consultez
Définir les assertions d'une action sélectionnée comme dépendances.
Association de compte de service multiprojet bloquée
L'erreur suivante se produit lorsque vous tentez d'utiliser un compte de service personnalisé provenant d'un projet différent 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 :
- Identifiez le Google Cloud projet dans lequel se trouve le compte de service personnalisé.
- 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. - Assurez-vous que le compte principal 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 compte de service multiprojet.
Erreurs de dépendance @dataform/core
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 dans votre dépôt, Dataform remplit 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 d'identifiants utilisateur pour 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 Google Cloud services 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 exclure l'ID client OAuth de Dataform dans votre configuration de 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 de 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 Install packages (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 Install packages (Installer les packages).
Les cibles de package git+ ne sont pas compatibles
L'erreur suivante se produit lorsque vous définissez des packages dans package.json avec des cibles préfixées par 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éfixées par 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.
Délai d'installation du package dépassé
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 qui effectue 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éer un appel de workflow.
- Mettre à jour une configuration de version.
Pour résoudre cette erreur, attribuez le
rôle 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 parvient 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 du caractère permanent ou temporaire de l'échec.
É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 :
- Vérifiez que l'hôte de votre dépôt Git est accessible depuis l'Internet public.
- 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.
- 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.
- Suivez toutes les étapes décrites dans 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 peut être temporairement peu fiable.
Pour optimiser la fiabilité de la production et éviter les erreurs de connexion temporaires, suivez ces bonnes pratiques :
- Évitez les compilations fréquentes de commitish en production : l'appel direct de
CreateCompilationResultsur un commitish Git, tel quemainou un tag Git spécifique, nécessite que Dataform effectue un nouveau clone Git et installe les packages sur le réseau à chaque exécution. Le déclenchement de compilations fréquentes de commitish sur plusieurs pipelines augmente la dépendance au réseau externe et la latence d'exécution. - 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 une planification contrôlée 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.
- É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.
- Ajoutez des nouvelles tentatives dans les workflows d'orchestration : lorsque vous orchestrez des compilations Dataform à partir de planificateurs externes tels que Managed Service for Apache Airflow, configurez des nouvelles tentatives automatisées avec un intervalle exponentiel entre les tentatives sur votre opérateur pour gérer correctement 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 d'inventaire des éléments cloud ou les audits d'autorisations IAM, mais pas dans Dataform dans la console. Google Cloud
Pour savoir comment identifier l'origine de ces dépôts à l'aide de libellés, consultez Identifier les dépôts pour les assets BigQuery.
Secret pour un dépôt distant 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.
Compte de service non visible dans le menu déroulant
Lors de la configuration d'un dépôt ou d'un appel de workflow, le menu Compte de service peut ne pas afficher de compte de service personnalisé existant.
Dataform utilise l'API Identity and Access Management pour lister les comptes de service. Cela nécessite 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 attribuer le
rôle Lecteur des comptes de service
(
roles/iam.serviceAccountViewer) ou un autre rôle incluant l'iam.serviceAccounts.listautorisation 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
3.0.0ou 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. - Nous vous recommandons d'utiliser systématiquement la dernière version disponible du package Dataform Core.
- Spécifiez explicitement la version du package dans
package.json, par exemple3.0.0. N'utilisez pas d'autresdependenciesoptions depackage.json, par exemple>version.