Dépanner l'ingestion PostgreSQL
Aperçu
Le connecteur PostgreSQL pour Lakeflow Connect est en aperçu public. Contactez votre équipe de compte Databricks pour vous inscrire à l'aperçu public.
Cette page décrit les problèmes courants liés au connecteur PostgreSQL dans Databricks Lakeflow Connect et comment les résoudre.
Pour obtenir des conseils de dépannage généraux qui s'appliquent à tous les pipelines d'ingestion gérés, consultez Dépannage des pipelines d'ingestion gérés.
Dépannage spécifique au connecteur
Les étapes de dépannage de cette section sont spécifiques au connecteur PostgreSQL.
Erreurs d'autorisation
Si vous recevez une erreur d'autorisation, vérifiez que l'utilisateur de réplication dispose des privilèges nécessaires. Voir les exigences relatives aux utilisateurs de la base de données PostgreSQL pour la liste complète des privilèges requis.
ERREUR : autorisation refusée pour la table
Cette erreur indique que l'utilisateur de réplication ne dispose pas des privilèges SELECT sur la table spécifiée. Accorder les privilèges nécessaires :
GRANT SELECT ON TABLE schema_name.table_name TO databricks_replication;
ERREUR : doit être un superutilisateur ou avoir le rôle de réplication pour utiliser les emplacements de réplication
Cette erreur indique que l'utilisateur de réplication ne dispose pas du privilège REPLICATION. Accordez le rôle de réplication :
-- For standard PostgreSQL
ALTER USER databricks_replication WITH REPLICATION;
-- For AWS RDS/Aurora
GRANT rds_replication TO databricks_replication;
-- For GCP Cloud SQL
ALTER USER databricks_replication with REPLICATION;
Vérifiez si la réplication logique est activée
Pour vérifier si la réplication logique est activée :
SHOW wal_level;
La sortie devrait être logical. Si ce n'est pas le cas, mettez à jour le parameter wal_level et redémarrez le serveur PostgreSQL.
Pour PostgreSQL géré dans le cloud :
- AWS RDS/Aurora : définissez
rds.logical_replicationsur1dans le groupe de paramètres. - Azure Database for PostgreSQL : activez la réplication logique dans les paramètres du serveur.
- GCP Cloud SQL : définissez l'indicateur
cloudsql.logical_decodingsuron.
Vérifier si une publication existe
Pour vérifier si une publication existe pour vos tables :
SELECT * FROM pg_publication WHERE pubname = 'databricks_publication';
-- Check which tables are included in the publication
SELECT schemaname, tablename
FROM pg_publication_tables
WHERE pubname = 'databricks_publication';
Si la publication n'existe pas, créez-la :
CREATE PUBLICATION databricks_publication FOR TABLE schema_name.table_name;
Vérifiez l'identité de la réplique.
Pour vérifier le paramètre d’identité du réplica pour une table :
SELECT schemaname, tablename, relreplident
FROM pg_tables t
JOIN pg_class c ON t.tablename = c.relname
WHERE schemaname = 'your_schema' AND tablename = 'your_table';
La colonne relreplident doit afficher les valeurs suivantes :
fpour une identité de réplication COMPLÈTE (requis pour les tables sans clés primaires ou colonnes TOASTable).dpour l'identité de réplique DEFAULT (utilise la clé primaire).
Si l'identité du réplica n'est pas définie correctement, mettez-la à jour :
ALTER TABLE schema_name.table_name REPLICA IDENTITY FULL;
Erreurs d'emplacement de réplication
Accumulation WAL et problèmes d'espace disque
Si la passerelle d'ingestion est arrêtée pendant une période prolongée, l'emplacement de réplication peut entraîner l'accumulation de fichiers WAL (Write-Ahead Log), remplissant potentiellement l'espace disque.
Pour vérifier l'utilisation du disque WAL :
SELECT pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_replication_slots
WHERE slot_name = 'your_slot_name';
Pour éviter l'accumulation de WAL :
- Assurez-vous que la passerelle d'ingestion s'exécute en continu.
- Surveillez régulièrement le décalage de réplication et l'espace disque.
Si des fichiers WAL se sont accumulés, vous pouvez supprimer manuellement l'emplacement de réplication :
SELECT pg_drop_replication_slot('your_slot_name');
Si un emplacement de réplication est supprimé ou devient invalide, mettez à jour la spécification de pipeline avec un nouvel emplacement pour cette base de données et exécutez un full refresh.
Délai d'expiration en attente du jeton de table
Le pipeline d’ingestion pourrait expirer en attendant que l’information soit fournie par la passerelle. Cela peut être dû à l'une des raisons suivantes :
- Vous exécutez une version antérieure de la passerelle.
- Une erreur s'est produite lors de la génération des informations nécessaires. Vérifiez les logs du driver de passerelle pour les erreurs.
- L'instantané initial prend plus de temps que prévu. Pour les tables volumineuses, envisagez d'augmenter le délai d'attente du pipeline ou d'exécuter le chargement initial pendant les heures creuses.
Conflit de noms de tables sources
Ingestion pipeline error: "org.apache.spark.sql.catalyst.ExtendedAnalysisException: Cannot have multiple queries named `orders_snapshot_load` for `orders`. Additional queries on that table must be named. Note that unnamed queries default to the same name as the table.
Cela indique qu'il y a un conflit de noms en raison de plusieurs tables source nommées orders dans différents schémas source qui sont ingérées par le même pipeline d'ingestion vers le même schéma de destination.
Créez plusieurs paires passerelle-pipeline qui écrivent ces tables en conflit dans des schémas de destination différents.
Changements de schéma incompatibles
Une modification de schéma incompatible entraîne l'échec du pipeline d'ingestion avec une erreur INCOMPATIBLE_SCHEMA_CHANGE. Pour poursuivre la réplication, Trigger une full refresh des tables concernées.
Les modifications de schéma incompatibles incluent les éléments suivants :
- Modification du type de données d'une colonne
- Renommer une colonne
- Modification de la clé primaire d’une table
- Suppression d'une colonne faisant partie de l'identité de réplication
Databricks ne peut pas garantir que toutes les lignes antérieures à la modification du schéma ont été ingérées lorsque le pipeline d'ingestion échoue en raison d'une modification de schéma incompatible.
CHANGEMENT_DE_SCHÉMA_NON_INCRÉMENTIEL
NON_INCREMENTAL_SCHEMA_CHANGE: Column '<column>' was added to table '<table>'. A full refresh is required to continue incremental ingestion.
Cette erreur se produit lorsqu'une nouvelle colonne est ajoutée à une table source pendant que l'ingestion incrémentale est active. Le connecteur ne peut pas renseigner les valeurs de la nouvelle colonne à partir des données de modification historiques, un refresh complet est donc nécessaire.
Exécutez une refresh complète de la table affectée pour reprendre l'ingestion. Voir refresh complète des tables cibles.
Erreurs de délai d’expiration de la connexion
Si vous recevez des erreurs de délai d'expiration de connexion, effectuez les vérifications suivantes :
- Vérifiez que les règles de pare-feu autorisent les connexions à partir du workspace Databricks.
- Vérifiez que le serveur PostgreSQL est joignable depuis le réseau Databricks.
- Assurez-vous que le fichier
pg_hba.confautorise les connexions depuis la plage d'adresses IP de Databricks. - Vérifiez que les identifiants de connexion sont corrects.
Erreurs de connexion SSL/TLS
Si vous recevez des erreurs de connexion SSL/TLS, effectuez les vérifications suivantes :
-
Vérifiez que le serveur PostgreSQL prend en charge les connexions SSL.
-
Vérifiez le parameter
ssldans la configuration PostgreSQL :SQLSHOW ssl; -
Assurez-vous que le fichier
pg_hba.confexige ou autorise les connexions SSL pour l’utilisateur de réplication. -
Pour les bases de données PostgreSQL gérées dans le cloud, vérifiez que le SSL est activé dans les paramètres du serveur.
Authentification default : impossible de configurer les identifiants par défaut
Si vous recevez cette erreur, un problème est survenu lors de la découverte des identifiants de l'utilisateur actuel. Tentez de remplacer les éléments suivants :
w = WorkspaceClient()
Avec :
w = WorkspaceClient(host=input('Databricks Workspace URL: '), token=input('Token: '))
Consultez Authentification dans la documentation du Databricks SDK pour Python.
PERMISSION_DENIED : vous n'êtes pas autorisé à créer des clusters. Veuillez contacter votre administrateur.
Contactez un administrateur de compte Databricks pour qu'il vous accorde les autorisations Unrestricted cluster creation.
CODE D'ERREUR DLT : INGESTION_GATEWAY_INTERNAL_ERROR
Vérifiez les fichiers stdout dans les Logs du Driver pour obtenir des messages d'erreur détaillés. Les causes courantes incluent les suivantes :
- Erreurs d'emplacement de réplication
- Problèmes de configuration de la publication
- Problèmes de connectivité réseau
- Privilèges insuffisants sur la base de données source.
Erreurs de certificat de serveur TLS
Pour résoudre les problèmes d'erreurs de validation du certificat de serveur TLS, consultez Dépanner les erreurs de certificat TLS.