Pattern, instruction
Un modèle est une construction qui mappe des tuples de chaîne à des expressions tabulaires. Chaque modèle doit déclarer un nom de modèle et éventuellement définir un mappage de modèle. Les modèles qui définissent un mappage retournent une expression tabulaire lorsqu’ils sont appelés. Deux instructions doivent être séparées par un point-virgule.
Les modèles vides sont des modèles qui sont déclarés, mais qui ne définissent pas de mappage. Lorsqu’ils sont appelés, ils retournent des SEM0036 d’erreur ainsi que les détails des définitions de modèle manquantes dans l’en-tête HTTP. Les applications de niveau intermédiaire qui fournissent une expérience de Langage de requête Kusto (KQL) peuvent utiliser les détails retournés dans le cadre de leur processus pour enrichir les résultats des requêtes KQL. Pour plus d’informations, consultez Utilisation d’applications de niveau intermédiaire.
Syntax
Déclarez un modèle vide :
declare
pattern
PatternName;
Déclarez et définissez un modèle :
declare
pattern
PatternName =(
ArgName:
ArgType [,
... ])
[[
PathName:
PathArgType]
]{
(
ArgValue1_1 [,
ArgValue2_1,
... ])
[.[
PathValue_1]
]=
{
expression1}
;
[
(
ArgValue1_2 [,
ArgValue2_2,
... ])
[.[
PathValue_2]
]=
{
expression2}
;
... ]}
;
Appelez un modèle :
- PatternName
(
ArgValue1 [,
ArgValue2 ...]).
PathValue - PatternName
(
ArgValue1 [,
ArgValue2 ...]).["
PathValue"]
- PatternName
Découvrez les conventions de syntaxe.
Paramètres
Nom | Type | Obligatoire | Description |
---|---|---|---|
PatternName | string |
✔️ | Nom du modèle. |
ArgName | string |
✔️ | Nom de l’argument. Les modèles peuvent avoir un ou plusieurs arguments. |
ArgType | string |
✔️ | Type de données scalaire de l’argument ArgName . Valeurs possibles : string |
PathName | string |
Nom de l’argument path. Les modèles ne peuvent avoir aucun chemin ou un seul chemin. | |
PathArgType | string |
Type de l’argument PathArgType . Valeurs possibles : string |
|
ArgValue | string |
✔️ | Valeurs de tuple ArgName et pathName facultatives à mapper à une expression. |
PathValue | string |
Valeur à mapper pour PathName. | |
expression | string |
✔️ | Expression tabulaire ou lambda qui fait référence à une fonction retournant des données tabulaires. Par exemple : Logs | where Timestamp > ago(1h) |
Exemples
Dans chacun des exemples suivants, un modèle est déclaré, défini, puis appelé.
Définir des modèles simples
L’exemple suivant définit un modèle qui mappe les états à une expression qui retourne sa capitale/ville principale.
declare pattern country = (name:string)[state:string]
{
("USA").["New York"] = { print Capital = "Albany" };
("USA").["Washington"] = { print Capital = "Olympia" };
("Canada").["Alberta"] = { print Capital = "Edmonton" };
};
country("Canada").Alberta
Sortie
Capital |
---|
Edmonton |
L’exemple suivant définit un modèle qui définit certaines données d’application délimitées.
declare pattern App = (applicationId:string)[scope:string]
{
('a1').['Data'] = { range x from 1 to 5 step 1 | project App = "App #1", Data = x };
('a1').['Metrics'] = { range x from 1 to 5 step 1 | project App = "App #1", Metrics = rand() };
('a2').['Data'] = { range x from 1 to 5 step 1 | project App = "App #2", Data = 10 - x };
('a3').['Metrics'] = { range x from 1 to 5 step 1 | project App = "App #3", Metrics = rand() };
};
union App('a2').Data, App('a1').Metrics
Sortie
Application | Données | Mesures |
---|---|---|
Application n°2 | 9 | |
Application n°2 | 8 | |
Application n°2 | 7 | |
Application n°2 | 6 | |
Application n°2 | 5 | |
Application n°1 | 0.53674122855537532 | |
Application n°1 | 0.78304713305654439 | |
Application n°1 | 0.20168860732346555 | |
Application n°1 | 0.13249123867679469 | |
Application n°1 | 0.19388305330563443 |
Normalisation
Il existe des variantes de syntaxe pour appeler des modèles. Par exemple, l’union suivante retourne une seule expression de modèle, car tous les appels sont du même modèle.
declare pattern app = (applicationId:string)[eventType:string]
{
("ApplicationX").["StopEvents"] = { database("AppX").Events | where EventType == "StopEvent" };
("ApplicationX").["StartEvents"] = { database("AppX").Events | where EventType == "StartEvent" };
};
union
app("ApplicationX").StartEvents,
app('ApplicationX').StartEvents,
app("ApplicationX").['StartEvents'],
app("ApplicationX").["StartEvents"]
Aucun caractère générique
Il n’y a pas de traitement spécial accordé aux caractères génériques dans un modèle. Par exemple, la requête suivante retourne un seul appel de modèle manquant.
declare pattern app = (applicationId:string)[eventType:string]
{
("ApplicationX").["StopEvents"] = { database("AppX").Events | where EventType == "StopEvent" };
("ApplicationX").["StartEvents"] = { database("AppX").Events | where EventType == "StartEvent" };
};
union app("ApplicationX").["*"]
| count
Retourne une erreur sémantique
Une ou plusieurs références de modèle n’ont pas été déclarées. Références de modèle détectées : ["app('ApplicationX').[' *']"]
Utiliser des applications de niveau intermédiaire
Une application de niveau intermédiaire offre à ses utilisateurs la possibilité d’utiliser KQL et souhaite améliorer l’expérience en enrichissant les résultats de la requête avec des données augmentées de son service interne.
À cette fin, l’application fournit aux utilisateurs une instruction de modèle qui retourne des données tabulaires que leurs utilisateurs peuvent utiliser dans leurs requêtes. Les arguments du modèle sont les clés que l’application utilisera pour récupérer les données d’enrichissement. Lorsque l’utilisateur exécute la requête, l’application n’analyse pas la requête elle-même, mais prévoit plutôt de tirer parti de l’erreur retournée par un modèle vide pour récupérer les clés dont elle a besoin. Il ajoute donc la requête à la déclaration de modèle vide, l’envoie au cluster pour traitement, puis analyse l’en-tête HTTP retourné pour récupérer les valeurs des arguments de modèle manquants. L’application utilise ces valeurs pour rechercher les données d’enrichissement et génère une nouvelle déclaration qui définit le mappage de données d’enrichissement approprié. Enfin, l’application ajoute la nouvelle définition à la requête de l’utilisateur, la renvoie pour traitement et retourne le résultat qu’elle reçoit à l’utilisateur.
Exemple
Dans l’exemple suivant, une application de niveau intermédiaire permet d’enrichir les requêtes avec des emplacements de longitude/latitude. L’application utilise un service interne pour mapper des adresses IP à des emplacements de longitude/latitude et fournit un modèle appelé map_ip_to_longlat
à cet effet. Supposons que l’application obtient la requête suivante de l’utilisateur :
map_ip_to_longlat("10.10.10.10")
L’application n’analyse pas cette requête et ne sait donc pas quelle adresse IP (10.10.10.10) a été passée au modèle. Il ajoute donc la requête utilisateur à une déclaration de modèle vide map_ip_to_longlat
et l’envoie pour traitement :
declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")
L’application reçoit l’erreur suivante en réponse.
Une ou plusieurs références de modèle n’ont pas été déclarées. Références de modèle détectées : ["map_ip_to_longlat('10.10.10.10')"]
L’application inspecte l’erreur, détermine que l’erreur indique une référence de modèle manquante et récupère l’adresse IP manquante (10.10.10.10). Il utilise l’adresse IP pour rechercher les données d’enrichissement dans son service interne et crée un nouveau modèle définissant le mappage de l’adresse IP aux données de longitude et de latitude correspondantes. Le nouveau modèle est ajouté à la requête de l’utilisateur et réexécuté. Cette fois, la requête réussit, car les données d’enrichissement sont désormais déclarées dans la requête et le résultat est envoyé à l’utilisateur.
declare pattern map_ip_to_longlat = (address:string)
{
("10.10.10.10") = { print Lat=37.405992, Long=-122.078515 }
};
map_ip_to_longlat("10.10.10.10")
Sortie
Lat | Long |
---|---|
37.405992 | -122.078515 |
Cette fonctionnalité n’est pas prise en charge dans Azure Monitor.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour