Copier des données de PostgreSQL à l’aide d’Azure Data Factory ou Synapse Analytics

S’APPLIQUE À : Azure Data Factory Azure Synapse Analytics

Conseil

Essayez Data Factory dans Microsoft Fabric, une solution d’analyse tout-en-un pour les entreprises. Microsoft Fabric couvre tous les aspects, du déplacement des données à la science des données, en passant par l’analyse en temps réel, l’aide à la décision et la création de rapports. Découvrez comment démarrer un nouvel essai gratuitement !

Cet article décrit comment utiliser l’activité de copie dans des pipelines Azure Data Factory et Synapse Analytics pour copier des données à partir d’une base de données PostgreSQL. Il s’appuie sur l’article Vue d’ensemble de l’activité de copie.

Important

Le nouveau connecteur PostgreSQL offre une meilleure prise en charge native de PostgreSQL, et de meilleures performances. Si vous utilisez le connecteur PostgreSQL hérité dans votre solution, pris en charge en l’état uniquement à des fins de compatibilité descendante, consultez l’article sur le Connecteur PostgreSQL (hérité).

Fonctionnalités prises en charge

Ce connecteur PostgreSQL est pris en charge pour les fonctionnalités suivantes :

Fonctionnalités prises en charge IR
Activité de copie (source/-) ① ②
Activité de recherche ① ②

① Runtime d’intégration Azure ② Runtime d’intégration auto-hébergé

Pour obtenir la liste des banques de données prises en charge en tant que sources ou récepteurs par l’activité de copie, consultez le tableau Banques de données prises en charge.

Plus précisément, ce connecteur PostgreSQL prend en charge PostgreSQL version 7.4 et versions ultérieures.

Prérequis

Si votre magasin de données se trouve dans un réseau local, un réseau virtuel Azure ou un cloud privé virtuel Amazon, vous devez configurer un runtime d’intégration auto-hébergé pour vous y connecter.

Si votre magasin de données est un service de données cloud managé, vous pouvez utiliser Azure Integration Runtime. Si l’accès est limité aux adresses IP qui sont approuvées dans les règles de pare-feu, vous pouvez ajouter les adresses IP Azure Integration Runtime dans la liste d’autorisation.

Vous pouvez également utiliser la fonctionnalité de runtime d’intégration de réseau virtuel managé dans Azure Data Factory pour accéder au réseau local sans installer et configurer un runtime d’intégration auto-hébergé.

Pour plus d’informations sur les mécanismes de sécurité réseau et les options pris en charge par Data Factory, consultez Stratégies d’accès aux données.

Le runtime d’intégration fournit un pilote PostgreSQL intégré à partir de la version 3.7. Ainsi, vous n’avez pas besoin d’installer manuellement un pilote.

Prise en main

Pour effectuer l’activité Copie avec un pipeline, vous pouvez vous servir de l’un des outils ou kits SDK suivants :

Créer un service lié à PostgreSQL à l’aide de l’interface utilisateur

Utilisez les étapes suivantes pour créer un service lié à PostgreSQL dans l’interface utilisateur du portail Azure.

  1. Accédez à l’onglet Gérer dans votre espace de travail Azure Data Factory ou Synapse et sélectionnez Services liés, puis cliquez sur Nouveau :

  2. Recherchez Postgre et sélectionnez le connecteur PostgreSQL.

    Sélectionnez le connecteur PostgreSQL.

  3. Configurez les informations du service, testez la connexion et créez le nouveau service lié.

    Configurez un service lié à PostgreSQL.

Informations de configuration des connecteurs

Les sections suivantes fournissent des informations sur les propriétés utilisées pour définir les entités Data Factory spécifiques du connecteur PostgreSQL.

Propriétés du service lié

Les propriétés prises en charge pour le service lié PostgreSQL sont les suivantes :

Propriété Description Obligatoire
type La propriété type doit avoir la valeur : PostgreSqlV2 Oui
server Spécifie le nom d’hôte (et éventuellement le port) sur lequel PostgreSQL s’exécute. Oui
port Port TCP du serveur PostgreSQL. Non
database Base de données PostgreSQL à laquelle se connecter. Oui
username Nom d’utilisateur avec lequel se connecter. Non obligatoire si vous utilisez IntegratedSecurity. Oui
mot de passe Mot de passe avec lequel se connecter. Non obligatoire si vous utilisez IntegratedSecurity. Oui
sslMode Contrôle si SSL est utilisé, en fonction de la prise en charge du serveur.
- Disable : SSL est désactivé. Si le serveur impose l’utilisation de SSL, la connexion échoue.
- Allow : privilégie les connexions non SSL si le serveur les autorise, mais autorise les connexions SSL.
- Prefer : privilégie les connexions SSL si le serveur les autorise, mais autorise les connexions sans SSL.
- Require : échec de la connexion si le serveur ne prend pas en charge SSL.
- Verify-ca : échec de la connexion si le serveur ne prend pas en charge SSL. Vérifie également le certificat de serveur.
- Verify-full : échec de la connexion si le serveur ne prend pas en charge SSL. Vérifie également le certificat de serveur en le comparant au nom de l’hôte.
Options : Disable (0) / Allow (1) / Prefer (2) (Par défaut) / Require (3) / Verify-ca (4) / Verify-full (5)
Non
authenticationType Type d’authentification pour la connexion à la base de données. Prend en charge uniquement Basic. Oui
connectVia Runtime d’intégration à utiliser pour la connexion à la banque de données. Pour plus d’informations, consultez la section Conditions préalables. À défaut de spécification, le runtime d’intégration Azure par défaut est utilisé. Non
Propriétés de connexion supplémentaires :
schéma Définit le chemin d’accès de recherche du schéma. Non
pooling Indique si le regroupement de connexions doit être utilisé. Non
connectionTimeout Délai alloué (en secondes) pour tenter d’établir une connexion avant de mettre fin à la tentative, et de générer une erreur. Non
commandTimeout Délai alloué (en secondes) pour tenter d’exécuter une commande avant de mettre fin à la tentative, et de générer une erreur. L’affectation de la valeur zéro indique un temps infini. Non
trustServerCertificate Indique si le certificat de serveur doit être approuvé ou non sans être validé. Non
sslCertificate Emplacement d’un certificat client à envoyer au serveur. Non
sslKey Emplacement d’une clé cliente pour l’envoi d’un certificat client au serveur. Non
sslPassword Mot de passe d’une clé de certificat client. Non
readBufferSize Détermine la taille de la mémoire tampon interne utilisée par Npgsql au moment de la lecture. L’augmentation de cette taille peut améliorer les performances pour le transfert de données volumineuses à partir de la base de données. Non
logParameters Quand cette option est activée, les valeurs de paramètre sont journalisées au moment de l’exécution des commandes. Non
fuseau horaire Obtient ou définit le fuseau horaire de la session. Non
encodage Obtient ou définit le codage .NET utilisé pour coder/décoder les données de chaîne PostgreSQL. Non

Notes

Pour disposer d’une vérification SSL complète via la connexion ODBC lors de l’utilisation d’Integration Runtime auto-hébergé (SHIR), vous devez utiliser explicitement une connexion de type ODBC au lieu du connecteur PostgreSQL et effectuer la configuration suivante :

  1. Configurez le DSN sur tous les serveurs SHIR.
  2. Placez le certificat approprié pour PostgreSQL dans C:\Windows\ServiceProfiles\DIAHostService\AppData\Roaming\postgresql\root.crt sur les serveurs SHIR. C’est là que le pilote ODBC recherche > le certificat SSL à vérifier lorsqu’il se connecte à la base de données.
  3. Dans votre connexion de fabrique de données, utilisez une connexion de type ODBC, avec votre chaîne de connexion pointant vers le DSN que vous avez créé sur vos serveurs SHIR.

Exemple :

{
    "name": "PostgreSqlLinkedService",
    "properties": {
        "type": "PostgreSqlV2",
        "typeProperties": {
            "server": "<server>",
            "port": 5432,
            "database": "<database>",
            "username": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            },
            "sslmode": <sslmode>,
            "authenticationType": "Basic"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemple : stockage du mot de passe dans Azure Key Vault

{
    "name": "PostgreSqlLinkedService",
    "properties": {
        "type": "PostgreSqlV2",
        "typeProperties": {
            "server": "<server>",
            "port": 5432,
            "database": "<database>",
            "username": "<username>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                },
                "secretName": "<secretName>"
            }
            "sslmode": <sslmode>,
            "authenticationType": "Basic"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propriétés du jeu de données

Pour obtenir la liste complète des sections et propriétés disponibles pour la définition de jeux de données, consultez l’article sur les jeux de données. Cette section fournit la liste des propriétés prises en charge par le jeu de données PostgreSQL.

Pour copier des données à partir de PostgreSQL, les propriétés prises en charge sont les suivantes :

Propriété Description Obligatoire
type La propriété type du jeu de données doit avoir la valeur : PostgreSqlV2Table Oui
schéma Nom du schéma. Non (si « query » dans la source de l’activité est spécifié)
table Nom de la table. Non (si « query » dans la source de l’activité est spécifié)

Exemple

{
    "name": "PostgreSQLDataset",
    "properties":
    {
        "type": "PostgreSqlV2Table",
        "linkedServiceName": {
            "referenceName": "<PostgreSQL linked service name>",
            "type": "LinkedServiceReference"
        },
        "annotations": [],
        "schema": [],
        "typeProperties": {
            "schema": "<schema name>",
            "table": "<table name>"
        }
    }
}

Si vous utilisiez un dataset typé RelationalTable, il reste pris en charge tel quel, mais nous vous suggérons d’utiliser désormais le nouveau dataset.

Propriétés de l’activité de copie

Pour obtenir la liste complète des sections et des propriétés disponibles pour la définition des activités, consultez l’article Pipelines. Cette section fournit la liste des propriétés prises en charge par la source PostgreSQL.

PostgreSQL en tant que source

Pour copier des données à partir de PostgreSQL, les propriétés prises en charge dans la section source de l’activité de copie sont les suivantes :

Propriété Description Obligatoire
type La propriété type de la source de l’activité Copy doit avoir la valeur : PostgreSqlV2Source Oui
query Utiliser la requête SQL personnalisée pour lire les données. Par exemple : "query": "SELECT * FROM \"MySchema\".\"MyTable\"". Non (si « tableName » est spécifié dans dataset)

Notes

Les noms de schéma et de table respectent la casse. Encadrez-les avec des guillemets doubles ("") dans la requête.

Exemple :

"activities":[
    {
        "name": "CopyFromPostgreSQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<PostgreSQL input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "PostgreSqlV2Source",
                "query": "SELECT * FROM \"MySchema\".\"MyTable\""
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Si vous utilisiez une source de données typée RelationalSource, elle reste prise en charge telle quelle, mais nous vous suggérons d’utiliser désormais la nouvelle source.

Mappage de type de données pour PostgreSQL

Quand vous copiez des données à partir de PostgreSQL, les mappages suivants sont utilisés entre les types de données PostgreSQL et les types de données temporaires utilisés par le service de manière interne. Pour découvrir comment l’activité de copie mappe le schéma et le type de données la source au récepteur, voir Mappages de schémas et de types de données.

Type de données PostgreSql Type de données de service intermédiaire Type de données de service intermédiaire pour PostgreSQL (hérité)
SmallInt Int16 Int16
Integer Int32 Int32
BigInt Int64 Int64
Decimal (Précision <= 28) Decimal Decimal
Decimal (Précision > 28) Non pris en charge String
Numeric Decimal Decimal
Real Single Single
Double Double Double
SmallSerial Int16 Int16
Serial Int32 Int32
BigSerial Int64 Int64
Money Decimal String
Char String String
Varchar String String
Text String String
Bytea Byte[] Byte[]
Timestamp DateTime DateTime
Timestamp with time zone DateTime String
Date DateTime DateTime
Time TimeSpan TimeSpan
Time with time zone DateTimeOffset String
Interval TimeSpan String
Boolean Boolean Boolean
Point String String
Line String String
Iseg String String
Box String String
Path String String
Polygon String String
Circle String String
Cidr String String
Inet String String
Macaddr String String
Macaddr8 String String
Tsvector String String
Tsquery String String
UUID Guid Guid
Json String String
Jsonb String String
Array String String
Bit Byte[] Byte[]
Bit varying Byte[] Byte[]
XML String String
IntArray String String
TextArray String String
NumbericArray String String
DateArray String String
Range String String
Bpchar String String

Propriétés de l’activité Lookup

Pour en savoir plus sur les propriétés, consultez Activité Lookup.

Mettre à niveau le service lié PostgreSQL

Voici les étapes permettant de mettre à niveau votre service lié PostgreSQL :

  1. Créez un service lié PostgreSQL, et configurez-le en vous référant aux Propriétés du service lié.

  2. Le mappage de type de données du dernier service lié PostgreSQL est différent de celui de la version héritée. Pour en savoir plus sur le dernier mappage de type de données, consultez Mappage de type de données pour PostgreSQL.

Différences entre PostgreSQL et PostgreSQL (hérité)

Le tableau ci-dessous montre les différences de mappage de type de données entre PostgreSQL et PostgreSQL (hérité).

Type de données PostgreSQL Type de données de service intermédiaire pour PostgreSQL Type de données de service intermédiaire pour PostgreSQL (hérité)
Money Decimal Chaîne
Timestamp with time zone Date/Heure Chaîne
Time with time zone DateTimeOffset Chaîne
Intervalle TimeSpan Chaîne
BigDecimal Non pris en charge. Vous pouvez également utiliser la fonction to_char() pour convertir BigDecimal en type String. Chaîne

Pour obtenir une liste des magasins de données pris en charge comme sources et récepteurs par l’activité de copie, consultez la section sur les magasins de données pris en charge.