Instrução de padrão
Um padrão é uma construção que mapeia cadeias de carateres para expressões tabulares. Cada padrão tem de declarar um nome de padrão e, opcionalmente, definir um mapeamento de padrões. Os padrões que definem um mapeamento devolvem uma expressão tabular quando invocado. As duas instruções têm de ser separadas por ponto e vírgula.
Os padrões vazios são padrões que são declarados, mas não definem um mapeamento. Quando invocados, devolvem o erro SEM0036 juntamente com os detalhes das definições de padrão em falta no cabeçalho HTTP. As aplicações de camada média que fornecem uma experiência de Linguagem de Pesquisa Kusto (KQL) podem utilizar os detalhes devolvidos como parte do processo para enriquecer os resultados da consulta KQL. Para obter mais informações, veja Trabalhar com aplicações de camada média.
Syntax
Declarar um padrão vazio:
declare
pattern
PatternName;
Declarar e definir um padrão:
declare
pattern
PatternName =(
ArgName:
ArgType [,
... ])
[[
PathName:
PathArgType]
]{
(
ArgValue1_1 [,
ArgValue2_1,
... ])
[.[
PathValue_1]
]=
{
expression1}
;
[
(
ArgValue1_2 [,
ArgValue2_2,
... ])
[.[
PathValue_2]
]=
{
expression2}
;
... ]}
;
Invocar um padrão:
- PatternName
(
ArgValue1 [,
ArgValue2 ...]).
PathValue - PatternName
(
ArgValue1 [,
ArgValue2 ...]).["
PathValue"]
- PatternName
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Tipo | Necessário | Descrição |
---|---|---|---|
PatternName | string |
✔️ | O nome do padrão. |
ArgName | string |
✔️ | O nome do argumento. Os padrões podem ter um ou mais argumentos. |
ArgType | string |
✔️ | O tipo de dados escalar do argumento ArgName . Valores possíveis: string |
PathName | string |
O nome do argumento caminho. Os padrões não podem ter um caminho ou um caminho. | |
PathArgType | string |
O tipo do argumento PathArgType . Valores possíveis: string |
|
ArgValue | string |
✔️ | Os valores de cadeia de identificação ArgName e PathName opcionais a serem mapeados para uma expressão. |
PathValue | string |
O valor a mapear para PathName. | |
expression | string |
✔️ | Uma expressão tabular ou lambda que referencia uma função que devolve dados tabulares. Por exemplo: Logs | where Timestamp > ago(1h) |
Exemplos
Em cada um dos seguintes exemplos, um padrão é declarado, definido e, em seguida, invocado.
Definir padrões simples
O exemplo seguinte define um padrão que mapeia estados para uma expressão que devolve a capital/cidade principal.
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
Saída
Capital |
---|
Edmonton |
O exemplo seguinte define um padrão que define alguns dados de aplicação no âmbito.
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
Saída
Aplicação | Dados | Métricas |
---|---|---|
Aplicação n.º 2 | 9 | |
Aplicação n.º 2 | 8 | |
Aplicação n.º 2 | 7 | |
Aplicação n.º 2 | 6 | |
Aplicação n.º 2 | 5 | |
Aplicação n.º 1 | 0.53674122855537532 | |
Aplicação n.º 1 | 0.78304713305654439 | |
Aplicação n.º 1 | 0.20168860732346555 | |
Aplicação n.º 1 | 0.13249123867679469 | |
Aplicação n.º 1 | 0.19388305330563443 |
Normalização
Existem variações de sintaxe para invocar padrões. Por exemplo, a união seguinte devolve uma expressão de padrão único, uma vez que todas as invocações têm o mesmo padrão.
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"]
Sem carateres universais
Não há tratamento especial dado aos carateres universais num padrão. Por exemplo, a consulta seguinte devolve uma única invocação de padrão em falta.
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
Devolve um erro semântico
Uma ou mais referências de padrão não foram declaradas. Referências de padrões detetadas: ["app('ApplicationX').[' *']"]
Trabalhar com aplicações de camada média
Uma aplicação de camada média fornece aos seus utilizadores a capacidade de utilizar kQL e quer melhorar a experiência ao enriquecer os resultados da consulta com dados aumentados do seu serviço interno.
Para tal, a aplicação fornece aos utilizadores uma instrução de padrão que devolve dados tabulares que os utilizadores podem utilizar nas respetivas consultas. Os argumentos do padrão são as chaves que a aplicação utilizará para obter os dados de melhoramento. Quando o utilizador executa a consulta, a aplicação não analisa a própria consulta, mas planeia tirar partido do erro devolvido por um padrão vazio para obter as chaves necessárias. Assim, prepara a consulta com a declaração de padrão vazia, envia-a para o cluster para processamento e, em seguida, analisa o cabeçalho HTTP devolvido para obter os valores dos argumentos de padrão em falta. A aplicação utiliza estes valores para procurar os dados de melhoramento e cria uma nova declaração que define o mapeamento de dados de melhoramento adequado. Por fim, a aplicação prepara a nova definição para a consulta do utilizador, reenvia-a para processamento e devolve o resultado que recebe ao utilizador.
Exemplo
No exemplo seguinte, uma aplicação de camada média fornece a capacidade de enriquecer as consultas com localizações de longitude/latitude. A aplicação utiliza um serviço interno para mapear endereços IP para localizações de longitude/latitude e fornece um padrão chamado map_ip_to_longlat
para esta finalidade. Vamos supor que a aplicação obtém a seguinte consulta do utilizador:
map_ip_to_longlat("10.10.10.10")
A aplicação não analisa esta consulta e, por conseguinte, não sabe que endereço IP (10.10.10.10) foi transmitido para o padrão. Assim, prepara a consulta do utilizador com uma declaração de padrão vazia map_ip_to_longlat
e envia-a para processamento:
declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")
A aplicação recebe o seguinte erro na resposta.
Uma ou mais referências de padrão não foram declaradas. Referências de padrões detetadas: ["map_ip_to_longlat('10.10.10.10')"]
A aplicação inspeciona o erro, determina que o erro indica uma referência de padrão em falta e obtém o endereço IP em falta (10.10.10.10). Utiliza o endereço IP para procurar os dados de melhoramento no seu serviço interno e cria um novo padrão que define o mapeamento do endereço IP para os dados de longitude e latitude correspondentes. O novo padrão é anexado à consulta do utilizador e executado novamente. Desta vez, a consulta é bem-sucedida porque os dados de melhoramento são agora declarados na consulta e o resultado é enviado ao utilizador.
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")
Saída
Lat | Long |
---|---|
37.405992 | -122.078515 |
Esta capacidade não é suportada no Azure Monitor.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários