Patrooninstructie
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
Een patroon is een constructie waarmee tekenreeks tuples worden toegewezen aan tabellaire expressies.
Elk patroon moet declareren een patroonnaam en eventueel definiëren een patroontoewijzing. Patronen die een toewijzing definiëren, retourneren een tabellaire expressie wanneer deze wordt aangeroepen. Scheid twee instructies door een puntkomma.
Lege patronen zijn patronen die worden gedeclareerd, maar geen toewijzing definiëren. Wanneer ze worden aangeroepen, retourneren ze een fout SEM0036 samen met de details van de ontbrekende patroondefinities in de HTTP-header.
Toepassingen in de middelste laag die een KQL-ervaring (Kusto Query Language) bieden, kunnen de geretourneerde details gebruiken als onderdeel van hun proces om KQL-queryresultaten te verrijken. Zie Werken met toepassingen in de middelste laagvoor meer informatie.
Syntaxis
Een leeg patroon declareren:
declare
pattern
PatternName-;
Een patroon declareren en definiëren:
declare
pattern
PatternName =(
ArgName:
ArgType [,
... ])
[[
PathName:
PathArgType]
]{
(
ArgValue1_1 [,
ArgValue2_1,
... ])
[.[
PathValue_1]
]=
{
expression1}
;
[
(
ArgValue1_2 [,
ArgValue2_2,
... ])
[.[
PathValue_2]
]=
{
expressie2}
;
... ]}
;
Een patroon aanroepen:
-
PatternName
(
ArgValue1 [,
ArgValue2 ...]).
PathValue -
PatternName
(
ArgValue1 [,
ArgValue2 ...]).["
PathValue"]
-
PatternName
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
PatternName- | string |
✔️ | De naam van het patroon. |
ArgName- | string |
✔️ | De naam van het argument. Patronen kunnen een of meer argumenten hebben. |
ArgType- | string |
✔️ | Het scalaire gegevenstype van het argument ArgName. Mogelijke waarden: string |
PathName- | string |
De naam van het padargument. Patronen kunnen geen pad of één pad hebben. | |
PathArgType- | string |
Het type PathArgType argument. Mogelijke waarden: string |
|
ArgValue- | string |
✔️ | De ArgName en optionele PathName tuple-waarden die moeten worden toegewezen aan een expressie. |
PathValue- | string |
De waarde die moet worden toegewezen voor PathName. | |
expressie | string |
✔️ | Een tabellaire of lambda-expressie die verwijst naar een functie die gegevens in tabelvorm retourneert. Bijvoorbeeld: Logs | where Timestamp > ago(1h) |
Voorbeelden
In de voorbeelden in deze sectie ziet u hoe u de syntaxis kunt gebruiken om aan de slag te gaan.
In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt in de Help-cluster, zoals de
StormEvents
tabel in de Voorbeelden database.
In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt, zoals de tabel
StormEvents
in de weather analytics voorbeeldgegevens.
Een eenvoudig patroon definiëren
In dit voorbeeld wordt een patroon gedefinieerd waarmee staten worden toegewezen aan een expressie die de hoofd-/hoofdstad retourneert.
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
uitvoer
Kapitaal |
---|
Edmonton |
Een bereikpatroon definiëren
In dit voorbeeld wordt een patroon gedefinieerd voor het bereik van gegevens en metrische gegevens van toepassingsgegevens. Het patroon wordt aangeroepen om een samenvoeging van de gegevens te retourneren.
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
uitvoer
App | Gegevens | Statistieken |
---|---|---|
App 2 | 9 | |
App 2 | 8 | |
App 2 | 7 | |
App 2 | 6 | |
App 2 | 5 | |
App 1 | 0.53674122855537532 | |
App 1 | 0.78304713305654439 | |
App 1 | 0.20168860732346555 | |
App 1 | 0.13249123867679469 | |
App 1 | 0.19388305330563443 |
Normalisatie
Er zijn syntaxisvariaties voor het aanroepen van patronen. De volgende samenvoeging retourneert bijvoorbeeld één patroonexpressie, omdat alle aanroepen hetzelfde patroon hebben.
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"]
Geen jokertekens
Er is geen speciale behandeling gegeven aan jokertekens in een patroon. Met de volgende query wordt bijvoorbeeld één ontbrekend patroon aanroepen geretourneerd.
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
semantische uitvoerfout
Een of meer patroonverwijzingen zijn niet gedeclareerd. Gedetecteerde patroonverwijzingen: ["app('ApplicationX').[' *']"]
Werken met toepassingen in de middelste laag
Een toepassing in de middelste laag biedt de gebruikers de mogelijkheid om KQL te gebruiken en wil de ervaring verbeteren door de queryresultaten te verrijken met uitgebreide gegevens van de interne service.
Daartoe biedt de toepassing gebruikers een patrooninstructie die tabelgegevens retourneert die hun gebruikers kunnen gebruiken in hun query's. De argumenten van het patroon zijn de sleutels die de toepassing gebruikt om de verrijkingsgegevens op te halen.
Wanneer de gebruiker de query uitvoert, parseert de toepassing de query zelf niet, maar gebruikt in plaats daarvan de fout die wordt geretourneerd door een leeg patroon om de sleutels op te halen die nodig zijn. De query wordt dus voorafgegaan door de lege patroondeclaratie, verzendt deze naar het cluster voor verwerking en parseert vervolgens de geretourneerde HTTP-header om de waarden van ontbrekende patroonargumenten op te halen. De toepassing gebruikt deze waarden om de verrijkingsgegevens op te zoeken en een nieuwe declaratie te maken waarmee de juiste verrijkingsgegevenstoewijzing wordt gedefinieerd.
Ten slotte wordt de nieuwe definitie voorafgegaan door de toepassing aan de query, wordt deze opnieuw verzonden voor verwerking en wordt het resultaat geretourneerd dat deze aan de gebruiker ontvangt.
Voorbeeld
In de voorbeelden wordt een patroon gedeclareerd, gedefinieerd en vervolgens aangeroepen.
Een leeg patroon declareren
In dit voorbeeld verrijkt een toepassing in de middelste laag query's met locaties voor lengte- en breedtegraad. De toepassing maakt gebruik van een interne service om IP-adressen toe te wijzen aan locaties voor lengtegraad/breedtegraad en biedt een patroon met de naam map_ip_to_longlat
. Wanneer de query wordt uitgevoerd, wordt er een fout geretourneerd met ontbrekende patroondefinities:
map_ip_to_longlat("10.10.10.10")
Een patroon declareren en definiëren
De toepassing parseert deze query niet en weet daarom niet welk IP-adres (10.10.10.10) is doorgegeven aan het patroon. Hiermee wordt de gebruikersquery voorbereid met een lege map_ip_to_longlat
patroondeclaratie en wordt deze verzonden voor verwerking:
declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")
De toepassing ontvangt de volgende fout in reactie.
Een of meer patroonverwijzingen zijn niet gedeclareerd. Gedetecteerde patroonverwijzingen: ["map_ip_to_longlat('10.10.10.10')"]
Een patroon aanroepen
De toepassing inspecteert de fout, bepaalt dat de fout een verwijzing naar een ontbrekend patroon aangeeft en het ontbrekende IP-adres (10.10.10.10). Het maakt gebruik van het IP-adres om de verrijkingsgegevens in de interne service op te zoeken en maakt een nieuw patroon dat de toewijzing van het IP-adres aan de bijbehorende lengte- en breedtegraadgegevens definieert. Het nieuwe patroon wordt voorafgegaan door de query van de gebruiker en wordt opnieuw uitgevoerd.
Deze keer slaagt de query omdat de verrijkingsgegevens nu in de query worden gedeclareerd en het resultaat naar de gebruiker wordt verzonden.
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")
uitvoer
Lat | Long |
---|---|
37.405992 | -122.078515 |