Transformer des données à l’aide d’une activité Script dans 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 !

Vous utilisez des activités de transformation dans un pipeline Data Factory ou Synapse pour transformer et traiter des données brutes en prévisions et en analyses. L’activité Script fait partie des activités de transformation prises en charge par les pipelines. Cet article s’ajoute à l’article Transformer des données qui présente une vue d’ensemble de la transformation de données et des activités de transformation prises en charge.

À l’aide de l’activité Script, vous pouvez exécuter des opérations courantes avec le langage de manipulation de données (DML) et le langage de définition de données (DDL). Les instructions DML telles que INSERT, UPDATE, DELETE et SELECT permettent aux utilisateurs d’insérer, de modifier, de supprimer et de récupérer des données dans la base de données. Les instructions DDL comme CREATE, ALTER et DROP permettent à un gestionnaire de bases de données de créer, modifier et supprimer des objets de base de données tels que des tables, des index et des utilisateurs.

Vous pouvez utiliser l’activité Script pour appeler un script SQL dans l’un des magasins de données suivants de votre entreprise ou sur une machine virtuelle Azure :

  • Azure SQL Database
  • Azure Synapse Analytics
  • Base de données SQL Server Si vous utilisez SQL Server, installez le runtime d’intégration auto-hébergé sur l’ordinateur qui héberge la base de données ou sur un autre ordinateur ayant accès à la base de données. Le runtime d’intégration auto-hébergé est un composant qui connecte des sources de données locales ou se trouvant sur une machine virtuelle Azure à des services cloud de manière gérée et sécurisée. Pour plus d’informations, consultez l’article Runtime d’intégration autohébergé.
  • Oracle
  • Snowflake

Le script peut contenir une seule ou plusieurs instructions SQL s’exécutant de façon séquentielle. Vous pouvez utiliser la tâche de script aux fins suivantes :

  • Tronquer une table pour la préparer à l'insertion de données.
  • Créer, modifier et supprimer des objets de base de données tels que des tables et des vues.
  • Recréer des tables de faits et de dimension avant d'y charger des données.
  • Exécuter des procédures stockées. Si l'instruction SQL appelle une procédure stockée qui retourne des résultats à partir d'une table temporaire, utilisez l'option WITH RESULT SETS afin de définir les métadonnées du jeu de résultats.
  • Enregistrez l’ensemble de lignes retourné par une requête en tant que sortie d’activité en vue d’une consommation en aval.

Détails de la syntaxe

Voici le format JSON permettant de définir une activité Script :

{ 
   "name": "<activity name>", 
   "type": "Script", 
   "linkedServiceName": { 
      "referenceName": "<name>", 
      "type": "LinkedServiceReference" 
    }, 
   "typeProperties": { 
      "scripts" : [ 
         { 
            "text": "<Script Block>", 
            "type": "<Query> or <NonQuery>", 
            "parameters":[ 
               { 
                  "name": "<name>", 
                  "value": "<value>", 
                  "type": "<type>", 
                  "direction": "<Input> or <Output> or <InputOutput>", 
                  "size": 256 
               }, 
               ... 
            ] 
         }, 
         ... 
      ],     
         ... 
         ] 
      }, 
      "scriptBlockExecutionTimeout": "<time>",  
      "logSettings": { 
         "logDestination": "<ActivityOutput> or <ExternalStore>", 
         "logLocationSettings":{ 
            "linkedServiceName":{ 
               "referenceName": "<name>", 
               "type": "<LinkedServiceReference>" 
            }, 
            "path": "<folder path>" 
         } 
      } 
    } 
} 

Le tableau suivant décrit ces paramètres JSON :

Nom de la propriété Description Obligatoire
name Nom de l’activité. Oui
type Type de l’activité, défini sur « Script ». Oui
typeProperties Spécifiez les propriétés pour configurer l’activité Script. Oui
linkedServiceName Base de données cible sur laquelle le script s’exécute. Il doit s’agir d’une référence à un service lié. Oui
Scripts Tableau d’objets pour représenter le script. Non
scripts.text Texte brut d’un bloc de requêtes. Non
scripts.type Type du bloc de requêtes. Il peut s’agir du type Query ou NonQuery. Par défaut : Query. Non
scripts.parameter Tableau de paramètres du script. Non
scripts.parameter.name Le nom du paramètre. Non
scripts.parameter.value Valeur du paramètre. Non
scripts.parameter.type Type de données du paramètre. Le type est Logical et suit le mappage de type de chaque connecteur. Non
scripts.parameter.direction Direction du paramètre. Valeur possible : Input, Output, InputOutput. La valeur est ignorée si la direction est Output. Le type ReturnValue n’est pas pris en charge. Définissez la valeur de retour de SP sur un paramètre de sortie pour la récupérer. Non
scripts.parameter.size Taille maximale du paramètre. S’applique uniquement au paramètre de direction Output/InputOutput de type string/byte[]. Non
scriptBlockExecutionTimeout Le temps d’attente avant l’expiration de l’opération d’exécution du bloc de script. Non
logSettings Paramètres pour stocker les journaux de sortie. Si ce paramètre n’est pas spécifié, le journal de script est désactivé. Non
logSettings.logDestination Destination de la sortie du journal. Les valeurs possibles sont ActivityOutput et ExternalStore. Valeur par défaut : ActivityOutput. Non
logSettings.logLocationSettings Paramètres de l’emplacement cible si logDestination est ExternalStore. Non
logSettiongs.logLocationSettings.linkedServiceName Service lié de l’emplacement cible. Seul le stockage d’objets blob est pris en charge. Non
logSettings.logLocationSettings.path Le chemin d’accès au dossier sous lequel stocker les journaux. Non

Sortie d'activité

Exemple de sortie :

{ 
    "resultSetCount": 2, 
    "resultSets": [ 
        { 
            "rowCount": 10, 
            "rows":[ 
                { 
                    "<columnName1>": "<value1>", 
                    "<columnName2>": "<value2>", 
                    ... 
                } 
            ] 
        }, 
        ... 
    ], 
    "recordsAffected": 123, 
    "outputParameters":{ 
        "<parameterName1>": "<value1>", 
        "<parameterName2>": "<value2>" 
    }, 
    "outputLogs": "<logs>", 
    "outputLogsLocation": "<folder path>", 
    "outputTruncated": true, 
    ... 
} 
Nom de la propriété Description Condition
resultSetCount Nombre de jeux de résultats retournés par le script. Toujours
resultSets Tableau qui contient tous les jeux de résultats. Toujours
resultSets.rowCount Nombre total de lignes dans le jeu de résultats. Toujours
resultSets.rows Tableau de lignes dans le jeu de résultats. Toujours
recordsAffected Nombre de lignes affectées par le script. Si scriptType a la valeur NonQuery.
outputParameters Paramètres de sortie du script. Si le type de paramètre est Output ou InputOutput.
outputLogs Journaux écrits par le script, par exemple, l’instruction print. Si le connecteur prend en charge l’instruction log, si enableScriptLogs a la valeur true et si logLocationSettings n’est pas fourni.
outputLogsPath Chemin complet du fichier. Si enableScriptLogs a la valeur true et logLocationSettings est fourni.
outputTruncated Indique que la sortie dépasse les limites et qu’elle a dû être tronquée. Si la sortie dépasse les limites.

Notes

  • La sortie est collectée à chaque exécution d’un bloc de script. La sortie finale est le résultat de la fusion de toutes les sorties de bloc de script. Le paramètre de sortie qui porte le même nom dans un bloc de script différent sera remplacé.
  • Étant donné que la taille et le nombre de lignes de la sortie sont limitées, la sortie sera tronquée dans l’ordre suivant : journaux -> paramètres -> lignes. Notez que cela s’applique à un seul bloc de script, ce qui signifie que les lignes de sortie du bloc de script suivant ne supprimeront pas les journaux précédents.
  • Les erreurs provoquées par le journal n’entraîneront pas l’échec de l’activité.
  • Pour en savoir plus sur la consommation des jeux de résultats de sortie des activités en aval, consultez Utiliser le résultat de l’activité de recherche.
  • Utilisez outputLogs lorsque vous utilisez les instructions « PRINT » à des fins de journalisation. Si la requête retourne des jeux de résultats, ceux-ci seront disponibles dans la sortie de l’activité et seront limités à 5 000 lignes et à une taille de 4 Mo.

Configurer l’activité Script à l’aide de l’interface utilisateur

Script en ligne

Capture d’écran montrant l’interface utilisateur pour configurer un script inline.

Les scripts en ligne s’intègrent parfaitement au pipeline CI/CD puisque le script est stocké dans le cadre des métadonnées du pipeline.

Journalisation

Capture d’écran montrant l’interface utilisateur des paramètres de journalisation d’un script.

Options de journalisation :

  • Désactiver : aucune sortie d’exécution n’est journalisée.
  • Sortie de l’activité : la sortie de l’exécution du script est ajoutée à la sortie de l’activité. Les activités en aval peuvent ensuite l’utiliser. La taille de la sortie est limitée à 4 Mo.
  • Stockage externe : conserve la sortie dans un stockage. Utilisez cette option si la taille de sortie est supérieure à 2 Mo ou si vous souhaitez conserver la sortie de manière explicite dans votre compte de stockage.

Remarque

Facturation : l’activité Script est facturée comme une activité de pipeline.

Consultez les articles suivants qui expliquent comment transformer des données par d’autres moyens :