Générer des expressions dans un flux de données de mappage

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 !

Dans un flux de données de mappage, de nombreuses propriétés de transformation sont entrées en tant qu’expressions. Ces expressions sont composées de valeurs de colonne, de paramètres, de fonctions, d’opérateurs et de littéraux qui correspondent à un type de données Spark au moment de l’exécution. Le mappage des flux de données a une expérience dédiée visant à vous aider à créer ces expressions, appelée Générateur d’expressions. Utilisant la complétion de code IntelliSense pour la mise en surbrillance, la vérification de la syntaxe et la saisie semi-automatique, le générateur d’expressions est conçu pour faciliter la création de flux de données. Cet article explique comment utiliser le générateur d’expressions pour créer efficacement votre logique métier.

Expression Builder

Générateur d’expressions ouvert

Il existe plusieurs points d’entrée pour ouvrir le générateur d’expressions. Ils dépendent tous du contexte spécifique de la transformation du flux de données. Le cas d’utilisation le plus courant est celui des transformations telles que colonne dérivée et agrégation, où les utilisateurs créent ou mettent à jour des colonnes à l’aide du langage d’expression de flux de données. Vous pouvez ouvrir le générateur d’expressions en sélectionnant Ouvrir le générateur d’expressions au-dessus de la liste de colonnes. Vous pouvez également sélectionner un contexte de colonne et ouvrir le générateur d’expressions directement avec cette expression.

Open Expression Builder derive

Dans certaines transformations comme les filtres, un clic sur une zone de texte d’expression bleue ouvre le générateur d’expressions.

Blue expression box

Lorsque vous référencez des colonnes dans une correspondance ou un groupe par condition, une expression peut extraire des valeurs des colonnes. Pour créer une expression, sélectionnez Colonne calculée.

Computed column option

Pour les cas où une expression ou une valeur littérale sont des entrées valides, sélectionnez Ajout de contenu dynamique pour générer une expression qui renvoie une valeur littérale.

Add dynamic content option

Éléments d’expression

Dans le mappage des flux de données, les expressions peuvent être composées de valeurs de colonne, de paramètres, de fonctions, de variables locales, d’opérateurs et de littéraux. Ces expressions doivent correspondre à un type de données Spark, par exemple une chaîne, une valeur booléenne ou un entier.

Expression elements

Functions

Les flux de données de mappage comportent des fonctions et opérateurs intégrés qui peuvent être utilisés dans des expressions. Pour obtenir la liste des fonctions disponibles, consultez la référence sur le langage de flux de données de mappage.

Fonctions définies par l’utilisateur (préversion)

Le mappage des flux de données prend en charge la création et l’utilisation de fonctions définies par l’utilisateur. Pour savoir comment créer et utiliser des fonctions définies par l’utilisateur, consultez les fonctions définies par l’utilisateur.

Adresser des index de tableau

Lorsque vous traitez des colonnes ou des fonctions qui retournent des types tableau, utilisez des crochets ([]) pour accéder à un élément spécifique. Si l’index n’existe pas, l’expression prend la valeur NULL.

Expression Builder array

Important

Dans le mappage des flux de données, les tableaux sont basés sur un, ce qui signifie que le premier élément est référencé par l’index 1. Par exemple, myArray[1] accède au premier élément d’un tableau appelé « myArray ».

Schéma d’entrée

Si votre flux de données utilise un schéma défini dans l’une de ses sources, vous pouvez référencer une colonne par nom dans de nombreuses expressions. Si vous utilisez la dérive de schéma, vous pouvez faire référence à des colonnes de manière explicite à l’aide des fonctions byName() ou byNames() ou à l’aide de modèles de colonne.

Noms de colonne avec des caractères spéciaux

Quand vous avez des noms de colonnes qui comportent des espaces ou des caractères spéciaux, placez-les entre accolades pour les référencer dans une expression.

{[dbo].this_is my complex name$$$}

Paramètres

Les paramètres sont des valeurs qui sont passées dans un flux de données au moment de l’exécution à partir d’un pipeline. Pour faire référence à un paramètre, sélectionnez le paramètre à partir de la vue Éléments d’expression ou référencez-le avec un signe dollar devant son nom. Par exemple, un paramètre appelé parameter1 est référencé par $parameter1. Pour plus d’informations, consultez Paramétrage de flux de données de mappage.

Recherche mise en cache

Une recherche mise en cache vous permet d’effectuer une recherche instantanée de la sortie d’un récepteur mis en cache. Deux fonctions peuvent être utilisées sur chaque récepteur, lookup() et outputs(). La syntaxe permettant de référencer ces fonctions est cacheSinkName#functionName(). Pour plus d’informations, consultez les récepteurs de cache.

lookup() prend les colonnes correspondantes dans la transformation actuelle en tant que paramètres, et retourne une colonne complexe égale à la ligne qui correspond aux colonnes clés du récepteur de cache. La colonne complexe retournée contient une sous-colonne pour chaque colonne mappée dans le récepteur de cache. Par exemple, si vous aviez un récepteur de cache de code d’erreur errorCodeCache qui avait une colonne clé correspondant au code, et une colonne appelée Message. L’appel à errorCodeCache#lookup(errorCode).Message retournerait le message correspondant au code passé.

outputs() n’accepte aucun paramètre et retourne l’intégralité du récepteur de cache sous la forme d’un tableau de colonnes complexes. Cet appel ne peut pas être effectué si des colonnes clés sont spécifiées dans le récepteur et que leur utilisation n’est possible qu’en présence de quelques lignes dans le récepteur de cache. Un cas d’usage courant consiste à ajouter la valeur maximale d’une clé d’incrémentation. Si une ligne unique agrégée en cache CacheMaxKey contient une colonne MaxKey, vous pouvez référencer la première valeur en appelant CacheMaxKey#outputs()[1].MaxKey.

Cached lookup

Variables locales

Si vous partagez la logique entre plusieurs colonnes ou si vous souhaitez compartimenter votre logique, vous pouvez créer une variable locale. Une locale est un ensemble de logique qui n’est pas propagé en aval à la transformation suivante. Vous pouvez créer une locale dans le générateur d’expressions en accédant à Éléments d’expression et en sélectionnant Locales. Créez-en un en sélectionnant Créer.

Create local

Les locales peuvent référencer n’importe quel élément d’expression, notamment des fonctions, un schéma d’entrée, des paramètres et d’autres locales. Lorsque vous référencez d’autres locales, l’ordre est important, car la locale référencée doit être « au-dessus » de l’objet actuel.

Create local 2

Pour référencer une locale dans une transformation, sélectionnez la locale dans la vue Éléments d’expression ou référencez-la avec un signe deux-points devant son nom. Par exemple, une variable locale appelée local1 est référencée par :local1. Pour modifier une définition de locale, pointez dessus dans la vue Éléments d’expression, puis sélectionnez l’icône de crayon.

Using locals

Aperçu des résultats d’expressions

Si le mode débogage est activé, vous pouvez utiliser le cluster de débogage de manière interactive pour afficher un aperçu de ce sur quoi votre expression est évaluée. Sélectionnez Actualiser en regard de l’aperçu des données pour mettre à jour les résultats de l’aperçu des données. Vous pouvez voir la sortie de chaque ligne en fonction des colonnes d’entrée.

In-progress preview

Interpolation de chaîne

Lorsque vous créez des chaînes longues qui utilisent des éléments d’expression, utilisez l’interpolation de chaîne pour créer facilement une logique de chaîne complexe. L’interpolation de chaîne évite une utilisation intensive de la concaténation de chaînes lorsque des paramètres sont inclus dans les chaînes de requête. Utilisez des guillemets doubles pour entourer le texte de chaîne littérale avec les expressions. Vous pouvez inclure des fonctions, des colonnes et des paramètres d’expression. Pour utiliser la syntaxe d’expression, mettez-la entre accolades.

Voici quelques exemples d’interpolation de chaîne :

  • "My favorite movie is {iif(instr(title,', The')>0,"The {split(title,', The')[1]}",title)}"

  • "select * from {$tablename} where orderyear > {$year}"

  • "Total cost with sales tax is {round(totalcost * 1.08,2)}"

  • "{:playerName} is a {:playerRating} player"

Notes

Lors de l’utilisation de la syntaxe d’interpolation de chaîne dans les requêtes sources SQL, la chaîne de requête doit être sur une seule ligne, sans « /n ».

Commenter les expressions

Ajoutez des commentaires à vos expressions en utilisant une seule ligne et une syntaxe de commentaire multiligne.

Les exemples suivants sont des commentaires valides :

  • /* This is my comment */

  • /* This is a

  • multi-line comment */

Si vous placez un commentaire en haut de votre expression, il apparaît dans la zone de texte de transformation afin de documenter vos expressions de transformation.

Comment in the transformation text box

Expressions régulières

De nombreuses fonctions du langage d’expression utilisent la syntaxe des expressions régulières. Quand vous utilisez des fonctions d’expression régulière, le Générateur d’expressions tente d’interpréter une barre oblique inverse (\) comme une séquence de caractères d’échappement. Quand vous utilisez des barres obliques inverses dans une expression régulière, placez l’expression régulière entière entre des accents graves (`) ou utilisez une barre oblique inverse double.

Voici un exemple utilisant des barres obliques :

regex_replace('100 and 200', `(\d+)`, 'digits')

Voici un exemple utilisant des barres obliques doubles :

regex_replace('100 and 200', '(\\d+)', 'digits')

Raccourcis clavier

Vous trouverez ci-dessous une liste des raccourcis disponibles dans le générateur d’expressions. La plupart des raccourcis IntelliSense sont disponibles lors de la création d’expressions.

  • Ctrl+K, Ctrl+C : marquer un commentaire sur la ligne entière.
  • Ctrl+K, Ctrl+U : supprimer les marques de commentaire.
  • F1 : fournir à l’éditeur des commandes d’aide.
  • Alt + touche flèche bas : descendre d’une ligne par rapport à la ligne actuelle.
  • Alt + touche flèche haut : monter d’une ligne par rapport à la ligne actuelle.
  • Ctrl + Espace : afficher l’aide contextuelle.

Expressions couramment utilisées

Convertir en dates ou en timestamps

Pour inclure des littéraux de chaîne dans votre sortie d’horodatage, wrappez votre conversion dans toString().

toString(toTimestamp('12/31/2016T00:12:00', 'MM/dd/yyyy\'T\'HH:mm:ss'), 'MM/dd /yyyy\'T\'HH:mm:ss')

Pour convertir des millisecondes issues de l’époque en date ou en horodatage, utilisez toTimestamp(<number of milliseconds>). Si le temps s’écoule en secondes, multipliez par 1 000.

toTimestamp(1574127407*1000l)

Le « l » situé à la fin de l’expression précédente signifie la conversion en type long comme la syntaxe en ligne.

Connaître l’heure à l’aide d’Epoch ou de l’heure Unix

toLong( currentTimestamp() - toTimestamp('1970-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS') ) * 1000l

Évaluation de la durée du flux de données

Le flux de données est traité jusqu’aux millisecondes. Pour 2018-07-31T20:00:00.2170000, la sortie est 2018-07-31T20:00:00.217. Sur le portail du service, l’horodateur est affiché dans le paramètre de navigateur actuel. La partie des millisecondes (217) n’y figure pas toujours, mais elle est traitée lorsque le workflow est exécuté de bout en bout. Vous pouvez utiliser toString(myDateTimeColumn) comme expression pour prévisualiser les données avec une précision complète. Traitez DateHeure comme DateHeure plutôt que comme chaîne à toutes fins pratiques.

Commencer à créer des expressions de transformation de données.