Copier et à transformer des données dans Azure Database pour MySQL à l’aide d’Azure Data Factory ou de 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 explique comment utiliser l’activité de copie dans les pipelines Azure Data Factory ou Synapse Analytics pour copier des données depuis et vers Azure Database pour MySQL, et utiliser Data Flow pour transformer les données dans Azure Database pour MySQL. Pour en savoir plus, lisez les articles d’introduction d’Azure Data Factory et de Synapse Analytics.

Ce connecteur est spécialisé pour

Pour copier des données à partir d’une base de données MySQL générique située localement ou dans le cloud, utilisez le connecteur MySQL.

Prérequis

Ce guide de démarrage rapide nécessite les ressources et la configuration mentionnées ci-dessous comme point de départ :

  • Une base de données Azure pour MySQL existante ou un serveur flexible MySQL avec un accès public ou un point de terminaison privé.
  • Activez Autoriser l’accès public à partir d’un service Azure dans Azure sur ce serveur dans la page de mise en réseau du serveur MySQL. Cela vous permettra d’utiliser Data Factory Studio.

Fonctionnalités prises en charge

Ce connecteur Azure Database pour MySQL est pris en charge pour les fonctionnalités suivantes :

Fonctionnalités prises en charge IR Point de terminaison privé managé
Activité de copie (source/récepteur)
Mappage de flux de données (source/récepteur) 0
Activité de recherche

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

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é à une base de données Azure Database pour MySQL à l’aide de l’interface utilisateur

Utilisez les étapes suivantes pour créer un service lié à Azure Database pour MySQL 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. Cherchez MySQL et sélectionnez le connecteur Azure Database pour MySQL.

    Select the Azure Database for MySQL connector.

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

    Configure a linked service to Azure Database for MySQL.

Informations de configuration des connecteurs

Les sections suivantes fournissent des informations détaillées sur les propriétés utilisées pour définir des entités Data Factory spécifiques au connecteur Azure Database pour MySQL.

Propriétés du service lié

Les propriétés suivantes sont prises en charge par le service lié Azure Database pour MySQL :

Propriété Description Obligatoire
type La propriété type doit être définie sur : AzureMySql Oui
connectionString Spécifiez les informations nécessaires pour vous connecter à l’instance d’Azure Database pour MySQL.
Vous pouvez également définir un mot de passe dans Azure Key Vault et extraire la configuration password de la chaîne de connexion. Pour plus d’informations, reportez-vous aux exemples suivants et à l’article Stocker des informations d’identification dans Azure Key Vault.
Oui
connectVia Runtime d’intégration à utiliser pour la connexion à la banque de données. Vous pouvez utiliser runtime d’intégration Azure ou un runtime d’intégration auto-hébergé (si votre banque de données se trouve dans un réseau privé). À défaut de spécification, le runtime d’intégration Azure par défaut est utilisé. Non

Voici un exemple de chaîne de connexion typique : Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;PWD=<password>. Selon votre cas de figure, vous pouvez définir d’autres propriétés :

Propriété Description Options Obligatoire
SSLMode Cette option spécifie si le pilote utilise le chiffrement TLS et la vérification lors de la connexion à MySQL. Par exemple, SSLMode=<0/1/2/3/4> DISABLED (0) / PREFERRED (1) (par défaut) / REQUIRED (2) / VERIFY_CA (3) / VERIFY_IDENTITY (4) Non
UseSystemTrustStore Cette option indique s’il faut utiliser un certificat d’autorité de certification provenant du magasin de confiance du système ou d’un fichier PEM spécifié. Par exemple, UseSystemTrustStore=<0/1>; Enabled (1) / Disabled (0) (par défaut) Non

Exemple :

{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;PWD=<password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemple : stockage du mot de passe dans Azure Key Vault

{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "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 Azure Database pour MySQL.

Pour copier des données à partir d’Azure Database pour MySQL, définissez la propriété de type du jeu de données sur AzureMySqlTable. 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 être définie sur : AzureMySqlTable Oui
tableName Nom de la table dans la base de données MySQL. Non (si « query » dans la source de l’activité est spécifié)

Exemple

{
    "name": "AzureMySQLDataset",
    "properties": {
        "type": "AzureMySqlTable",
        "linkedServiceName": {
            "referenceName": "<Azure MySQL linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "<table name>"
        }
    }
}

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 et le récepteur Azure Database pour MySQL.

Azure Database pour MySQL en tant que source

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

Propriété Description Obligatoire
type La propriété type de la source d’activité de copie doit être définie sur : AzureMySqlSource Oui
query Utiliser la requête SQL personnalisée pour lire les données. Par exemple : "SELECT * FROM MyTable". Non (si « tableName » est spécifié dans dataset)
queryCommandTimeout Temps d’attente avant l’expiration de la demande de requête. La valeur par défaut est de 120 minutes (02:00:00) Non

Exemple :

"activities":[
    {
        "name": "CopyFromAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Azure MySQL input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureMySqlSource",
                "query": "<custom query e.g. SELECT * FROM MyTable>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Azure Database pour MySQL en tant que récepteur

Pour copier des données vers Azure Database pour MySQL, les propriétés suivantes sont prises en charge dans la section sink de l’activité de copie :

Propriété Description Obligatoire
type La propriété type du récepteur d’activité de copie doit être définie sur : AzureMySqlSink Oui
preCopyScript Spécifiez une requête SQL pour l’activité de copie à exécuter avant l’écriture de données dans Azure Database pour MySQL à chaque exécution. Vous pouvez utiliser cette propriété pour nettoyer des données préchargées. Non
writeBatchSize Insère des données dans la table Azure Database pour MySQL lorsque la taille de la mémoire tampon atteint writeBatchSize.
La valeur autorisée est un entier représentant le nombre de lignes.
Non (valeur par défaut : 10 000)
writeBatchTimeout Temps d’attente pour que l’opération d’insertion de lot soit terminée avant d’expirer.
Valeurs autorisées : timespan. Exemple : 00:30:00 (30 minutes).
Non (valeur par défaut : 00:00:30)

Exemple :

"activities":[
    {
        "name": "CopyToAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure MySQL output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureMySqlSink",
                "preCopyScript": "<custom SQL script>",
                "writeBatchSize": 100000
            }
        }
    }
]

Propriétés du mappage de flux de données

Lors de la transformation de données dans le flux de données de mappage, vous pouvez lire et écrire dans des tables à partir d’Azure Database pour MySQL. Pour plus d’informations, consultez la transformation de la source et la transformation du récepteur dans le flux de données de mappage. Vous pouvez choisir d’utiliser un jeu de données Azure Database pour MySQL ou un jeu de données inline en tant que type de source et de récepteur.

Transformation de la source

Le tableau ci-dessous répertorie les propriétés prises en charge par une source Azure Database pour MySQL. Vous pouvez modifier ces propriétés sous l’onglet Options de la source.

Nom Description Obligatoire Valeurs autorisées Propriété du script de flux de données
Table de charge de travail Si vous sélectionnez Table comme entrée, le flux de données extrait toutes les données de la table spécifiée dans le jeu de données. Non - (pour le jeu de données inlined uniquement)
tableName
Requête Si vous sélectionnez Requête comme entrée, spécifiez une requête SQL pour extraire des données de la source, qui remplace toute table que vous spécifiez dans le jeu de données. L’utilisation de requêtes est un excellent moyen de réduire le nombre de lignes pour les tests ou les recherches.

La clause Order By n’est pas prise en charge, mais vous pouvez définir une instruction SELECT FROM complète. Vous pouvez également utiliser des fonctions de table définies par l’utilisateur. select * from udfGetData() est une fonction UDF dans SQL qui retourne une table que vous pouvez utiliser dans le flux de données.
Exemple de requête : select * from mytable where customerId > 1000 and customerId < 2000 ou select * from "MyTable".
Non String query
Procédure stockée Si vous sélectionnez Procédure stockée comme entrée, spécifiez un nom de procédure stockée pour lire les données de la table source, ou sélectionnez Actualiser pour demander au service de découvrir les noms des procédures. Oui (si vous sélectionnez Procédure stockée comme entrée) String procedureName
Paramètres de procédure Si vous sélectionnez Procédure stockée comme entrée, spécifiez les paramètres d’entrée de la procédure stockée dans l’ordre défini dans la procédure, ou sélectionnez Importer pour importer tous les paramètres de procédure sous la forme @paraName. Non Array inputs
Taille du lot Spécifiez la taille que doivent avoir les lots créés à partir d’un large volume de données. Non Integer batchSize
Niveau d’isolation Choisissez l’un des niveaux d’isolation suivants :
– Lecture validée.
– Lecture non validée (par défaut).
– Lecture renouvelable.
– Sérialisable.
– Aucun (ignorer le niveau d’isolation).
Non READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZABLE
NONE
isolationLevel

Exemple de script de source Azure Database pour MySQL

Quand vous utilisez Azure Database pour MySQL comme type de source, le script de flux de données associé est le suivant :

source(allowSchemaDrift: true,
    validateSchema: false,
    isolationLevel: 'READ_UNCOMMITTED',
    query: 'select * from mytable',
    format: 'query') ~> AzureMySQLSource

Transformation du récepteur

Le tableau ci-dessous répertorie les propriétés prises en charge par le récepteur Azure Database pour MySQL. Vous pouvez modifier ces propriétés sous l’onglet Options du récepteur.

Name Description Obligatoire Valeurs autorisées Propriété du script de flux de données
Mettre à jour la méthode Spécifiez les opérations autorisées sur la destination de votre base de données. Par défaut, seules les insertions sont autorisées.
Pour mettre à jour, effectuer un upsert ou supprimer des lignes, une transformation de modification de ligne est requise afin de baliser les lignes relatives à ces actions.
Oui true ou false deletable
insertable
updateable
upsertable
Colonnes clés Pour les mises à jour, les opérations upsert et les suppressions, une ou plusieurs colonnes clés doivent être définies afin de déterminer la ligne à modifier.
Le nom de colonne que vous choisissez comme clé sera utilisé dans le cadre des opérations suivantes de mise à jour, d’upsert et de suppression. Vous devez donc choisir une colonne qui existe dans le mappage du récepteur.
Non Array clés
Ignorer l’écriture des colonnes clés Si vous ne souhaitez pas écrire la valeur dans la colonne clé, sélectionnez « Ignorer l’écriture des colonnes clés ». Non true ou false skipKeyWrites
Action table Détermine si toutes les lignes de la table de destination doivent être recréées ou supprimées avant l’écriture.
- Aucun : Aucune action ne sera effectuée sur la table.
- Recréer : La table sera supprimée et recréée. Obligatoire en cas de création dynamique d’une nouvelle table.
- Tronquer : Toutes les lignes de la table cible seront supprimées.
Non true ou false recreate
truncate
Taille du lot Spécifiez le nombre de lignes écrites dans chaque lot. Les plus grandes tailles de lot améliorent la compression et l’optimisation de la mémoire, mais risquent de lever des exceptions de type mémoire insuffisante lors de la mise en cache des données. Non Integer batchSize
Pré et post-scripts SQL Spécifiez des scripts SQL multilignes qui s’exécutent avant (prétraitement) et après (post-traitement) l’écriture de données dans votre base de données de réception. Non String preSQLs
postSQLs

Conseil

  1. Il est recommandé de diviser les scripts de commandes par lot uniques contenant plusieurs commandes en plusieurs lots.
  2. Seules des instructions DDL (Data Definition Language, langage de définition de données) et DML (Data Manipulation Language, langage de manipulation de données) qui retournent un seul nombre de mises à jour peuvent être exécutées dans un lot. Pour en savoir plus, consultez Exécution d’opérations par lot
  • Activer l’extraction incrémentielle : utilisez cette option pour indiquer à ADF de traiter seulement les lignes qui ont changé depuis la dernière exécution du pipeline.

  • Colonne incrémentielle : quand vous utilisez la fonctionnalité d’extraction incrémentielle, vous devez choisir la colonne date/heure ou numérique que vous souhaitez utiliser comme filigrane dans votre table source.

  • Commencer la lecture à partir du début : la définition de cette option avec l’extraction incrémentielle indique à ADF de lire toutes les lignes lors de la première exécution d’un pipeline avec l’extraction incrémentielle activée.

Exemple de script de récepteur Azure Database pour MySQL

Quand vous utilisez Azure Database pour MySQL comme type de récepteur, le script de flux de données associé est le suivant :

IncomingStream sink(allowSchemaDrift: true,
    validateSchema: false,
    deletable:false,
    insertable:true,
    updateable:true,
    upsertable:true,
    keys:['keyColumn'],
    format: 'table',
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> AzureMySQLSink

Propriétés de l’activité Lookup

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

Mappage de type de données pour Azure Database pour MySQL

Lors de la copie de données à partir d’Azure Database pour MySQL, les mappages suivants sont utilisés entre les types de données MySQL et les types de données intermédiaires utilisés dans le service. 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 Azure Database pour MySQL Type de données de service intermédiaire
bigint Int64
bigint unsigned Decimal
bit Boolean
bit(M), M>1 Byte[]
blob Byte[]
bool Int16
char String
date Datetime
datetime Datetime
decimal Decimal, String
double Double
double precision Double
enum String
float Single
int Int32
int unsigned Int64
integer Int32
integer unsigned Int64
long varbinary Byte[]
long varchar String
longblob Byte[]
longtext String
mediumblob Byte[]
mediumint Int32
mediumint unsigned Int64
mediumtext String
numeric Decimal
real Double
set String
smallint Int16
smallint unsigned Int32
text String
time TimeSpan
timestamp Datetime
tinyblob Byte[]
tinyint Int16
tinyint unsigned Int16
tinytext String
varchar String
year Int32

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.