Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans Opérations Azure IoT, une transformation cartographique prend chaque message entrant dans un graphique de flux de données et produit un message de sortie basé sur vos règles. Vous pouvez renommer des champs, les réorganiser en nouvelles structures, calculer des valeurs dérivées ou supprimer des champs indésirables. En utilisant les règles des jokers, vous pouvez copier tous les champs en même temps.
Pour obtenir une vue d’ensemble des graphiques de flux de données et la façon dont les transformations composent dans un pipeline, consultez vue d’ensemble des graphiques de flux de données.
Les transformations utilisent un langage d’expressions pour calculer les valeurs, les conditions de test et les champs de référence. Les expressions désignent les entrées par position, et non par le nom : la première entrée de la inputs liste est $1, la seconde est $2, et ainsi de suite. Des fonctions intégrées telles que cToF convertissent et manipulent ces valeurs.
Pour la liste complète des opérateurs, fonctions, types de données et champs de métadonnées, voir la référence Expressions.
Prerequisites
- Instance de Opérations Azure IoT déployée dans un cluster Kubernetes. Pour plus d’informations, consultez Deploy Opérations Azure IoT.
- Un point de terminaison de registre par défaut nommé
defaultqui pointe versmcr.microsoft.comest créé automatiquement pendant le déploiement. Les transformations intégrées utilisent ce point de terminaison.
Les exemples Azure CLI de cet article utilisent des variables d’environnement afin de pouvoir définir chaque valeur une fois puis copier-coller les commandes as-is. Si vous utilisez l'environnement Opérations Azure IoT Codespaces du quickstart, ces variables sont déjà définies pour vous et vous pouvez sauter cette étape. Sinon, définissez les variables d’environnement suivantes dans votre shell avant d’exécuter les commandes.
Les scripts suivants définissent les variables d’environnement les plus couramment utilisées :
| Variable d'environnement | Description |
|---|---|
SUBSCRIPTION_ID |
L’identifiant de l’abonnement contenant votre instance Opérations Azure IoT. |
RESOURCE_GROUP |
Le nom du groupe de ressources contenant votre instance Opérations Azure IoT. |
AIO_INSTANCE_NAME |
Le nom de votre instance Opérations Azure IoT. Pour lister vos instances, exécutez az iot ops list -o table. |
CLUSTER_NAME |
Le nom du cluster Kubernetes compatible Azure Arc qui héberge votre instance. |
LOCATION |
La région Azure à utiliser pour de nouvelles ressources, par exemple eastus. |
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>
Vous n’avez qu’à définir les variables utilisées dans cet article. Cet article peut utiliser des variables d’environnement supplémentaires pour les noms de ressources que vous choisissez. L’article explique comment les placer là où ils sont introduits.
Fonctionnement des règles de mappage
Chaque règle de carte comporte quatre parties :
| Propriété | Obligatoire | Description |
|---|---|---|
inputs |
Oui | Liste des chemins de champ à lire à partir du message entrant. |
output |
Oui | Chemin de champ où le résultat apparaît dans le message de sortie. |
expression |
Non | Formule appliquée aux valeurs d’entrée. Si vous l’omettez, la première valeur d’entrée se copie directement. |
description |
Non | Étiquette lisible par les humains pour la règle, incluse dans les messages d’erreur. |
La transformation de l’application attribue des variables de position aux entrées dans l’ordre. Par exemple, si inputs est , alors ['Position', 'Office'] est la valeur de $1 et Position est la valeur de $2Office.
Renommer un champ
Pour renommer BirthDateDateOfBirth, mappez une entrée à un autre chemin de sortie. Tu n’as pas besoin d’expression. La valeur est copiée telle quelle.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Dans la configuration de la transformation de carte, ajoutez une règle :
| Réglage | Valeur |
|---|---|
| Input | BirthDate |
| Output | DateOfBirth |
Restructurer les champs
Utilisez la notation par points dans le chemin de sortie pour déplacer des champs dans une structure imbriquée.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Ajoutez deux règles :
| Input | Sortie |
|---|---|
Name |
Employee.Name |
BirthDate |
Employee.DateOfBirth |
Étant donné cette entrée :
{
"Name": "Grace Owens",
"BirthDate": "19840202",
"Position": "Analyst"
}
Ces deux règles produisent :
{
"Employee": {
"Name": "Grace Owens",
"DateOfBirth": "19840202"
}
}
Seuls les champs répertoriés dans la sortie d’une règle apparaissent dans le résultat. Le résultat n’inclut pas le Position champ car aucune règle ne le mappe.
Combiner plusieurs entrées
Lorsque vous listez plusieurs entrées, utilisez leurs variables de position pour les fusionner dans une expression.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Ajoutez une règle :
| Réglage | Valeur |
|---|---|
| Entrées |
Position, Office |
| Output | Employment.Position |
| Expression | $1 + ", " + $2 |
Donné Position: "Analyst" et Office: "Kent, WA", la sortie est "Analyst, Kent, WA".
Transformer des valeurs avec des expressions
Utilisez le expression champ pour appliquer des fonctions intégrées ou des arithmétiques. L’exemple suivant utilise cToF, une fonction de conversion unitaire intégrée qui convertit une valeur Celsius en Fahrenheit. N’oubliez pas que cela $1 fait référence à la première entrée, pas à un nom de champ.
Pour la liste complète des opérateurs, fonctions et fonctionnalités avancées, voir la référence Expressions. Les groupes de référence fonctionnent par catégorie, telles que la conversion d’unités, l’échelle et l’arrondi, les mathématiques et les fonctions de chaînes .
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Ajoutez une règle de calcul. Par exemple, pour convertir Celsius en Fahrenheit :
| Réglage | Valeur |
|---|---|
| Input | temperature |
| Output | temperature_f |
| Expression | cToF($1) |
Pour mettre à l’échelle une lecture de capteur à une plage de 0 à 100, utilisez l’expression scale($1, 0, 4095, 0, 100).
Copier tous les champs avec des caractères génériques
Lorsque la sortie doit correspondre étroitement à l’entrée avec seulement quelques modifications, utilisez une règle générique pour copier chaque champ à la fois. Ensuite, ajoutez des règles pour remplacer, ajouter ou supprimer des champs spécifiques.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Ajoutez une règle de passthrough qui copie tous les champs. Définissez l’entrée sur * et la sortie sur *.
Exigences des règles de caractères génériques
- Une règle générique doit être la première règle dans votre configuration de carte.
- Une transformation de carte ne supporte qu’une seule règle de joker.
- L’astérisque correspond à un ou plusieurs segments de chemin d’accès et doit représenter un segment complet. La transformation de la carte ne supporte pas les motifs partiels comme
partial*.
Caractères génériques de préfixe
Attribuez un préfixe spécifique au joker de la carte sauvage. Pour aplatir tous les champs depuis ColorProperties jusqu'au niveau racine :
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Ajoutez une règle avec entrée ColorProperties.* et sortie *.
Soit :
{
"ColorProperties": {
"Hue": "blue",
"Saturation": "90%",
"Brightness": "50%"
}
}
La sortie est la suivante :
{
"Hue": "blue",
"Saturation": "90%",
"Brightness": "50%"
}
Supprimer des champs de la sortie
Définissez la output valeur sur une chaîne vide pour exclure des champs spécifiques. En général, on utilise cette approche après une règle de joker : copier tout, puis retirer ce dont tu n’as pas besoin.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
- Ajoutez une règle de passthrough pour copier tous les champs.
- Ajoutez une règle de suppression et sélectionnez les champs à exclure (par exemple,
passwordetinternal_id).
Une règle de suppression ne peut pas inclure d’expression.
Vous pouvez remplacer les caractères génériques pour des champs spécifiques.
Lorsqu’une règle générique et une règle spécifique correspondent tous deux au même champ, la règle plus spécifique est prioritaire.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
- Ajoutez une règle de passthrough pour copier tous les champs.
- Ajoutez une règle de calcul pour
temperatureavec l’expressioncToF($1).
La transformation de carte applique la règle spécifique à temperature et copie tous les autres champs as-is.
Utiliser des champs de métadonnées
Lisez et écrivez sur les métadonnées des messages comme les sujets MQTT et les propriétés utilisateur. Consultez les champs métadonnées dans la référence des expressions.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Ajoutez une règle avec entrée region et sortie $metadata.user_property.region pour écrire une valeur de champ dans une propriété utilisateur MQTT.
Pour obtenir un exemple complet de routage de rubriques dynamiques, consultez Acheminer les messages vers différentes rubriques.
Utiliser la dernière valeur connue et les valeurs par défaut
Lorsque les données du capteur arrivent par intermittence, vous pouvez renseigner les champs manquants avec la dernière valeur connue ou une valeur statique par défaut. Consultez la dernière valeur connue et les valeurs par défaut dans la référence des expressions.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Ajoutez une règle pour le temperature champ et activez la dernière valeur connue. Définissez une valeur par défaut de 0 comme solution de secours.
Cette règle utilise la valeur actuelle lorsqu’elle est présente, revient à la dernière valeur connue et utilise 0 si aucun des deux n’est disponible.
Enrichir avec des données externes
L’enrichissement est optionnel. Vous n’en avez besoin que si vous souhaitez combiner les messages entrants avec les données de référence stockées dans le magasin d’états, comme une table de recherche des métadonnées de l’appareil. Si vos messages contiennent déjà tout ce dont vous avez besoin, passez cette section.
Lorsque vous avez besoin d’enrichissement, configurez un jeu de données de contextualisation que le moteur d’exécution interroge pendant le traitement. Par exemple, recherchez les métadonnées d’un appareil par son ID et incluez-la dans la sortie. Pour plus d’informations, consultez Enrichir avec des données externes.
Fonctionnalités exclusives du graphe de flux de données
Les graphiques de flux de données prennent en charge plusieurs fonctionnalités qui ne sont pas disponibles dans les mappages de flux builtInTransformation de données.
Valeurs par défaut pour les champs manquants
Utilisez la syntaxe ?? <default> sur une entrée pour fournir une solution de repli statique lorsqu'un champ est manquant. Cela est plus simple que d’écrire une if expression pour rechercher des valeurs vides.
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Dans la configuration de la transformation de carte, définissez l’entrée pour inclure la ?? syntaxe suivie de la valeur par défaut. Par exemple, entrez temperature ?? 0 en tant que champ d’entrée à utiliser 0 lorsque le champ de température est manquant.
Pour plus d’informations sur les types par défaut pris en charge et la combinaison des valeurs par défaut avec les dernières valeurs connues, consultez Valeurs par défaut dans la référence des expressions.
Fonctions Regex
Les graphiques de flux de données prennent en charge la correspondance et le remplacement des expressions régulières :
-
str::regex_matches(string, pattern): retourne true si la chaîne correspond au modèle regex. -
str::regex_replace(string, pattern, replacement): remplace toutes les correspondances regex par la chaîne de remplacement.
Ces fonctions sont utiles dans les expressions de filtre ou pour nettoyer et transformer des données de chaîne. Pour obtenir la liste complète des fonctions de chaîne, consultez Fonctions de chaîne dans la référence d’expressions.
Exemple de configuration complète
Voici une configuration de carte complète qui copie tous les champs, supprime les données sensibles, restructure un champ et calcule une valeur dérivée :
- Expérience des opérations
- Service de contrôle d’accès Azure (CLI)
- Bicep
- Kubernetes (débogage uniquement)
Dans l’expérience Opérations, créez un graphique de flux de données et ajoutez une transformation de carte. Dans le panneau de configuration de la carte, ajoutez des règles à :
- Copier tous les champs avec un passage générique.
-
Supprimez les champs sensibles en définissant la sortie sur vide pour
passwordetsecret_key. -
Restructurez le
BirthDatechamp enEmployee.DateOfBirth. -
Calculez une conversion Fahrenheit en utilisant la formule
cToF($1)dutemperaturechamp. -
Fusionnez les champs
PositionetOfficeavec la formule$1 + ", " + $2.