Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
✅ Azure Stream Analytics ✅ Fabric Eventstream
A cláusula MATCH_RECOGNIZE é usada para pesquisar um conjunto de eventos em um fluxo de dados. Esta cláusula permite definir padrões de evento usando expressões regulares e métodos agregados para verificar e extrair valores da correspondência.
O exemplo a seguir mostra a estrutura básica de uma cláusula MATCH_RECOGNIZE:
SELECT *
INTO output FROM input TIMESTAMP BY time
MATCH_RECOGNIZE (
LIMIT DURATION (minute, 1)
PARTITION BY tollBoothId
MEASURES
Last(Toyota.LicensePlate) AS toyotaLicensePlate,
Last(Lexus.LicensePlate) AS lexusLicensePlate
AFTER MATCH SKIP TO NEXT ROW
PATTERN (Toyota+ Ford* Lexus+)
DEFINE
Toyota AS Toyota.make = 'Toyota',
Ford AS Ford.make = 'Ford',
Lexus AS Lexus.make = 'Lexus'
) AS T
MATCH_RECOGNIZE tem uma saída correspondente de UMA LINHA POR PARTIDA como padrão, que é a única correspondência disponível. Isso significa que a correspondência produz um resultado de linha única por correspondência e não retorna as linhas que são correspondidas.
Sintaxe
SELECT_star_query_definition
MATCH_RECOGNIZE (
LIMIT DURATION (time_unit, time)
PARTITION BY column_alias
MEASURES
expression AS column_alias [,...n]
AFTER MATCH SKIP TO NEXT ROW
PATTERN ( <pattern_group> )
DEFINE
pattern_name AS boolean_expression [,…n]
) AS column_alias
<pattern_group> ::=
{
<pattern_name_modifier> [ | <pattern_group> ]*
}
<pattern_name_modifier> ::=
{
<pattern_atom> [ <pattern_atom> ]*
}
<pattern_atom> ::=
{
[ pattern_name | ( <pattern_group> ) ] [ <pattern_modifier> ]?
}
<pattern_name> :: =
{
name | .
}
<pattern_modifier> ::=
{
* | + | ?
}
DURAÇÃO LIMITE
A duração limite é usada para definir uma janela de tempo para o padrão a ser pesquisado. Os eventos são ordenados por hora e TIMESTAMP BY pode ser usado na cláusula SELECT para especificar o campo de tempo.
PARTIÇÃO POR
PARTITION BY permite que a correspondência seja chaveada e particionada sobre um nome de coluna. Uma correspondência acontecerá em cada chave exclusiva especificada pela instrução de partição. Isso permite que uma única consulta seja correspondida em todas as chaves e gere correspondências separadas, uma para cada chave.
APÓS A PARTIDA, PULE PARA A PRÓXIMA LINHA
Esta cláusula de pulo define que, uma vez que um padrão é correspondido a partir do evento S, a próxima tentativa de corresponder ao padrão começará no evento S+1. As correspondências podem se sobrepor neste caso, pois um padrão pode conter o início de outro padrão dentro. Esta é a única cláusula de pulo disponível.
MEDIDAS
MEASURES é usado para definir os valores projetados a partir da correspondência usando métodos agregados. Por exemplo, LAST(A.id) AS aid produzirá o último id valor encontrado em todos os eventos que corresponderam ao padrão nomeado A no nome aiddo campo.
Função de classificador
A função de classificador pode ser usada em MEASURES para nomes de padrões de saída correspondentes a eventos de entrada. A função retorna uma lista de cadeias de caracteres, cada uma com o nome do padrão que corresponde a um evento.
PADRÃO
O padrão define a expressão regular de eventos a serem pesquisados no fluxo de dados. As variáveis de padrão são definidas pelo usuário e separadas por espaços. Os modificadores gostam + e * podem ser usados para modificar a frequência de uma variável ao combinar eventos.
Exemplo
PATTERN (A+ (B | C))
O padrão neste exemplo define uma variável A pelo menos uma vez, seguida por uma concatenação de B ou C.
Quantificadores de padrões
Os quantificadores de padrão são usados para alterar como um padrão é mapeado no fluxo de dados, definindo quantas vezes um padrão precisa corresponder para ser válido. Estão disponíveis os seguintes quantificadores:
- '*' - Zero ou mais vezes
- '+' - Uma ou mais vezes
- '?' – Zero ou uma vez
- '|' - Um padrão ou outro
Exemplo:
PATTERN (A? B+)
Este exemplo define A 0 ou 1 vez seguida de B pelo menos uma vez.
DEFINIR
DEFINE especifica as regras usadas para corresponder uma variável de padrão a um evento. As regras são expressões booleanas sobre valores agregados do fluxo de dados.
DEFINE
A AS Last(A.bigint) > 5,
B AS Last(A.bigint) < B.bigint
Este exemplo define as regras A e B onde o valor LAST de A é maior que 5 e B onde o valor LAST de A é menor que o valor atual de B. Quando não se usa uma função agregada na expressão DEFINI, o evento atual que está sendo avaliado liga-se à variável padrão, por exemplo, em B.bigint o valor B vem do evento atual que está sendo avaliado.
Os padrões definidos só podem ser acessados em ordem, se o padrão A for definido antes do padrão B, A não poderá fazer referência a B.
Permitido
...
DEFINE
A AS Last(A.value),
B AS Max(A.value) + Max(B.value),
...
Não permitido
...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...
Métodos de agregação
Os seguintes métodos agregados podem ser usados em MEASURES e DEFINE:
- Min – O número mínimo agregado até agora.
- Max – O número máximo agregado até agora.
- Primeiro – O primeiro valor agregado.
- Último – O último valor agregado até agora.
Exemplo:
O reabastecimento de tanques de alta pressão é um processo perigoso e precisa ser monitorado de perto, pois o aumento da pressão em um tanque também aumenta sua temperatura, a pressão precisa aumentar constantemente para dar tempo para o tanque esfriar durante o reabastecimento.
Neste exemplo, o desenvolvedor deseja monitorar o reabastecimento de um tanque de alta pressão à medida que ele começa a aumentar a pressão. O tanque começa a reabastecer e não pode aumentar a pressão em seu dobro em menos de 3 minutos, caso contrário, o tanque superaquece e pode causar uma falha catastrófica.
A seguinte consulta pode ser usada para monitorar o progresso:
SELECT *
INTO output FROM input TIMESTAMP BY time
MATCH_RECOGNIZE (
LIMIT DURATION (minute, 3)
MEASURES
MAX(Dangerous.pressure) as pressure,
Classifier() as patterns
AFTER MATCH SKIP TO NEXT ROW
PATTERN (Normal+ Dangerous+)
DEFINE
Normal AS Normal.isFilling = 1,
Dangerous AS Max(Dangerous.pressure) > 2* Max(Normal.pressure)
) AS T
Esta consulta corresponde a Normal a qualquer evento que esteja enchendo o tanque e, caso a pressão seja superior ao dobro de um enchimento Normal dentro de 3 minutos, um evento é disparado com a leitura de pressão máxima para o padrão Perigoso .
Limitações
Somente valores de campo podem ser usados para agregações. Nenhuma função pode ser chamada dentro de uma chamada agregada.
Permitido
... DEFINE A AS Max(A.value) > 5, ...Não permitido
... DEFINE A AS Max(udf.myUdf(A.value)) > 5, ...Apenas um único campo pode ser fornecido a uma função agregada como parâmetro de entrada.
Permitido
... DEFINE A AS Max(A.value) > 5, ...Não permitido
... DEFINE A AS Max(A.value1 + A.value2) > 5, ...