Limitations du connecteur 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 répertorie les limitations et considérations relatives à l'ingestion PostgreSQL à l'aide de Databricks Lakeflow Connect.
Limitations générales du connecteur de base de données
Les limitations de cette section s'appliquent à tous les connecteurs de base de données dans Lakeflow Connect. Poursuivez votre lecture pour connaître les limitations spécifiques au connecteur.
-
Lorsque vous exécutez un pipeline planifié, les alertes ne se Trigger pas immédiatement. Au lieu de cela, ils Trigger lors de l’exécution de la prochaine mise à jour.
-
Lorsqu’une table source est supprimée, la table de destination n’est pas automatiquement supprimée. Vous devez supprimer la table de destination manuellement. Ce comportement n'est pas cohérent avec le comportement de Spark Declarative Pipelines sur Lakeflow.
-
Le catalogue de préproduction ne peut pas être un catalogue étranger.
-
Pendant les périodes de maintenance de la source, Databricks pourrait ne pas être en mesure d'accéder à vos données.
-
Si un nom de table source entre en conflit avec un nom de table de destination existant, la mise à jour du pipeline échoue.
-
La prise en charge des pipelines multi-destination est uniquement via l'API.
-
Vous pouvez éventuellement renommer une table que vous ingérez. Si vous renommez une table dans votre pipeline, il devient un pipeline API uniquement, et vous ne pouvez plus modifier le pipeline dans l'interface utilisateur.
-
Si vous sélectionnez une colonne après qu'un pipeline a déjà start, le connecteur ne renseigne pas automatiquement les données historiques pour la nouvelle colonne. Pour ingérer des données historiques, exécutez manuellement un refresh complet sur la table.
-
Databricks ne peut pas ingérer deux tables ou plus portant le même nom dans le même pipeline, même si elles proviennent de schémas sources différents.
-
Le système source suppose que les colonnes du curseur augmentent de façon monotone.
-
Les instantanés de passerelle ne peuvent pas être repris. Si vous mettez à jour le pipeline pendant qu'un instantané est en cours (par exemple, en ajoutant de nouvelles tables), l'instantané actuel est annulé et un nouvel instantané start. Le nouvel instantané inclut l'union des tables de l'instantané annulé et de toutes les tables nouvellement ajoutées.
-
Le connecteur ingère des données brutes sans transformations. Utilisez les Spark Declarative Pipelines en aval sur les Lakeflow Pipelines pour les transformations.
-
Le connecteur ne prend en charge que la réplication à partir d'instances PostgreSQL principales.
Authentification
- Le connecteur ne prend en charge que l'authentification par nom d'utilisateur et mot de passe.
Variations de base de données
- Le connecteur prend en charge PostgreSQL 13 ou une version supérieure.
- Le connecteur prend en charge AWS RDS PostgreSQL, Aurora PostgreSQL, Amazon EC2, Azure Database pour PostgreSQL, les machines virtuelles Azure et GCP Cloud SQL pour PostgreSQL. Le connecteur prend également en charge PostgreSQL on-premise via Azure ExpressRoute, AWS Direct Connect et la connexion VPN. Pour plus de détails sur la connectivité inter-cloud, consultez Connectivité réseau.
pipeline
- Chaque pipeline d'ingestion doit être associé à exactement une passerelle d'ingestion. Les passerelles ne peuvent pas être partagées entre les pipelines.
- Bien que le pipeline d'ingestion s'exécute sur un compute serverless, la passerelle d'ingestion doit s'exécuter sur un compute classique.
- La passerelle d'ingestion doit fonctionner en mode continu pour éviter le gonflement du Write-Ahead Log (WAL) et l'accumulation d'emplacements de réplication.
Réplication
-
Pour AWS RDS et Aurora, définissez le paramètre
rds.logical_replicationsur1. -
Chaque table que vous répliquez doit avoir son identité de réplica définie sur
FULLouDEFAULT. Databricks recommande d'utiliser l'identité de réplicaFULLpour les tables sans clés primaires ou avec des colonnes TOASTables. -
Les emplacements de réplication ne sont pas automatiquement supprimés lorsque vous supprimez des pipelines. Vous devez nettoyer manuellement les emplacements de réplication pour éviter l'accumulation de WAL. Consultez Nettoyer les emplacements de réplication.
-
Le connecteur utilise la position de l'emplacement de réplication pour le point de contrôle. Si le nœud PostgreSQL primaire est rétrogradé ou remplacé (par exemple, lors d'un basculement), les informations d'emplacement de réplication sont perdues. Cela entraîne une erreur d'emplacement introuvable qui nécessite une refresh complète de toutes les tables du pipeline. La connexion à un autre nœud source n'est pas prise en charge.
évolution des schémas
Les comportements décrits dans cette section s'appliquent uniquement si vous activez le DDL en ligne. Lorsque le DDL en ligne est désactivé, le connecteur détecte toujours les changements de schéma, mais les tables affectées nécessitent un refresh complet. Pour activer le DDL en ligne, consultez Facultatif : Configurer le suivi du DDL en ligne.
Lorsque le DDL en ligne est activé, le connecteur gère automatiquement les colonnes nouvelles et supprimées.
- Lorsqu'une nouvelle colonne apparaît dans la source, le connecteur l'ingère automatiquement lors de la prochaine exécution du pipeline.
- Lorsque vous supprimez une colonne de la source, le connecteur ne la supprime pas automatiquement. Au lieu de cela, le connecteur utilise une propriété de table pour définir la colonne supprimée sur
inactivedans la cible. Si une autre colonne apparaît ultérieurement avec un nom qui entre en conflit avec la colonneinactive, le pipeline échoue. Dans ce cas, exécutez un refresh complet de la table ou supprimez manuellement la colonne inactive.
Le connecteur peut gérer les DDL suivants, mais nécessite un refresh complet des tables cibles.
Instructions DDL nécessitant une complète refresh
- Modification du type de données d'une colonne
- Renommer une colonne
- Modification de la clé primaire d’une table
- Conversion d'une table d'unlogged à logged ou vice versa
- Ajout ou suppression de partitions (pour les tables partitionnées)
Mise en scène
Le catalogue de préproduction ne peut pas être un catalogue étranger.
Tables
- Databricks recommande d'ingérer 250 tables ou moins par pipeline. Cependant, il n'y a aucune limite quant au nombre de lignes ou de colonnes prises en charge dans ces tables.
- Databricks ne peut pas ingérer deux tables dont les noms ne diffèrent que par la casse (par exemple,
mytableetMyTable) en utilisant un seul pipeline. Pour prendre en charge de tels cas, créez deux paires de pipelines de passerelle-ingestion qui publient vers différents schémas cibles. - Les noms
source_catalog,source_schemaetsource_tablerespectent la casse pour le nom de la base de données, mais ne la respectent pas pour les noms de schémas et de tables (conformément au comportement default de PostgreSQL). Par exemple, si la base de données source est nomméeMyDatabase, vous devez la spécifier commeMyDatabasedans leingestion_definition. - Bien que vous puissiez ingérer à partir de plusieurs bases de données ou schémas source dans un seul pipeline, vous ne pouvez pas ingérer deux tables du même nom. Par exemple, vous ne pouvez pas ingérer à la fois
schema1.ordersetschema2.ordersdans le même pipeline. - Vous pouvez inclure plusieurs spécifications de table ou de schéma dans le champ
objectsduingestion_definition. Cependant, les noms des tables sources dans différents schémas sources ne peuvent pas se chevaucher. Des noms qui se chevauchent entraînent un échec du pipeline d'ingestion.
Types de données
-
Les types définis par l'utilisateur et les types d'extension tiers sont ingérés en tant que chaînes.
-
Les types de données
TIMEetTIMETZsont ingérés comme des chaînes de caractères. -
Pour les types de données
NUMERICetDECIMAL:- Si la précision est inférieure ou égale à 38,
NaNest mappé surnull. - Si la précision est supérieure à 38, la valeur est stockée sous forme de chaîne et
NaNest préservée sous forme de chaîne. Infet-Infsont pris en charge uniquement pour les types numériques non bornés. Pour une précision supérieure à 38, la valeur est stockée sous forme de chaîne et la valeur infinie est préservée.
- Si la précision est inférieure ou égale à 38,
-
Pour le type de données
DATE: La plage de dates complète de PostgreSQL est prise en charge.Infet-Infsont convertis ennull. Les dates av. J.-C. sont stockées à l’aide de la numérotation astronomique des années. Par exemple, 1 av. J.-C. correspond à l'année 0 et 2 av. J.-C. correspond à -1. -
Pour le type de données
TIMESTAMP(sans fuseau horaire) : Les valeurs sont ingérées sous forme de chaînes de caractères.Infet-Infsont conservés en tant que chaînes de caractères. -
Pour le type de données
TIMESTAMP WITH TIME ZONE: la plage PostgreSQL prise en charge est de4713-01-01 00:00:00.000000 BCà294276-12-31 23:59:59.999999 AD, tandis que la plage prise en charge par Databricks est de-290308-12-21 BCE 19:59:06 GMTà+294247-01-10 CE 04:00:54 GMT. Les Timestamps supérieurs à l’horodatage maximal pris en charge par Databricks sont convertis ennull. Les dates av. J.-C. sont stockées à l’aide de la numérotation astronomique des années. Par exemple, 1 av. J.-C. correspond à l’année 0 et 2 av. J.-C. correspond à -1.Infet-Infsont convertis ennull. -
Pour le type de données
INTERVAL: Les valeurs d'infini sont mappées à0 years 0 mins 0 days 0 hours 0 mins 0.0 secs. -
MONEYLes valeurs sont ingérées sous forme de chaînes. -
Les colonnes binaires (par exemple,
BYTEA) ne peuvent pas être utilisées comme clés de clustering. -
Tout type de données PostgreSQL intégré non listé dans la table Transformations automatiques de données est ingéré en tant que chaîne de caractères.
Tables partitionnées
- Les tables partitionnées PostgreSQL sont prises en charge.
- Chaque partition est traitée comme une table distincte à des fins de réplication.
- L'ajout ou la suppression de partitions nécessite un refresh complet de la table.
Limitations pour des variations spécifiques de PostgreSQL
Amazon RDS et Aurora
- Le paramètre
rds.logical_replicationdoit être défini sur1.
Base de données Azure pour PostgreSQL
- La réplication logique doit être activée dans les paramètres du serveur.
- Pour les déploiements à serveur unique, la réplication logique n'est disponible que dans les niveaux General Purpose et Memory Optimized.
- Pour les déploiements de serveurs flexibles, la réplication logique est prise en charge sur tous les niveaux.
- Le paramètre
max_slot_wal_keep_sizeest en lecture seule, fixe à -1 (infini) et ne peut pas être configuré.
Google Cloud SQL pour PostgreSQL
- Le drapeau
cloudsql.logical_decodingdoit être activé. - Cloud SQL ne permet pas de configurer
max_slot_wal_keep_size; il est fixé à -1 (infini) par default.