Quais são os padrões de configuração na versão prévia do Processador de Dados da Internet das Coisas do Azure?
Importante
O recurso Pré-visualização de Operações do Azure IoT — habilitado pelo Azure Arc — está atualmente em VERSÃO PRÉVIA. Você não deve usar esse software em versão prévia em ambientes de produção.
Veja os Termos de Uso Complementares para Versões Prévias do Microsoft Azure para obter termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou que, de outra forma, ainda não foram lançados em disponibilidade geral.
Vários tipos de configuração são comuns a várias fases de pipeline. Este artigo descreve os padrões de configuração de caminho, lote, modelos, repetição e duração.
Caminho
Vários estágios de pipeline usam um caminho para identificar um local na mensagem em que os dados devem ser lidos ou gravados. Para definir esses locais, você usa um campo Path
que usa a sintaxe jq:
- Um caminho é definido como uma cadeia de caracteres na interface do usuário e usa a sintaxe jq.
- Um caminho é definido em relação à raiz da mensagem do Processador de Dados. O caminho
.
refere-se a toda a mensagem. - Todos os caminhos começam com
.
. - Cada segmento de caminho pode ser:
.<identifier>
para uma chave de objeto alfanumérica, como.topic
.."<identifier>"
para uma chave de objeto arbitrária, como."asset-id"
.["<identifier>"]
para uma chave de objeto arbitrária, como["asset-id"]
.[<index>]
para um índice de matriz, como[2]
.
- Os segmentos podem ser encadeados para formar caminhos complexos.
Segmentos de caminho individuais devem estar em conformidade com as seguintes expressões regulares:
Padrão | Regex | Exemplo |
---|---|---|
.<identifier> |
\.[a-zA-Z_][a-zA-Z0-9_]* |
.topic |
."<identifier>" |
\."(\\"\|[^"])*" |
."asset-id" |
["<identifier>"] |
\["(\\"\|[^"])*"\] |
["asset-id"] |
[<index>] |
\[-?[0-9]+\] |
[2] |
Para saber mais, confira Caminhos no guia jq.
Exemplos de caminho
Os seguintes caminhos são exemplos baseados na estrutura de mensagens do processador de dados padrão:
.systemProperties
retorna:{ "partitionKey": "foo", "partitionId": 5, "timestamp": "2023-01-11T10:02:07Z" }
.payload.humidity
retorna:10
.userProperties[0]
retorna:{ "key": "prop1", "value": "value1" }
.userProperties[0].value
retorna:value1
Duration
Vários estágios exigem a definição de um intervalo de tempo. Por exemplo, janelas em um estágio de agregação e tempos limite em um estágio de chamada. Esses estágios usam um campo Duration
para representar esse valor.
Vários estágios de pipeline usam um intervalo de tempo. Por exemplo, o estágio de agregação tem uma propriedade Windows e os estágios de chamada têm uma propriedade de tempos limite. Para definir esses intervalos de tempo, use um campo Duration
:
A duração é um valor de cadeia de caracteres com o seguinte formato <number><char><number><char>
em que `char`` pode ser:
h
: horam
: minutos
: segundoms
: milissegundous
,µs
: microssegundons
: nanossegundos
Exemplos de duração
2h
1h10m30s
3m9ms400ns
Modelos
Vários estágios exigem que você defina uma cadeia de caracteres com uma combinação de valores dinâmicos e estáticos. Esses estágios usam valores de modelo.
Os modelos do Processador de Dados usam a sintaxe Mustache para definir valores dinâmicos em cadeias de caracteres.
Os valores dinâmicos do sistema disponíveis para uso em modelos são:
instanceId
: a ID da instância do processador de dados.pipelineId
: a ID do pipeline da qual o estágio faz parte.YYYY
: o ano atual.MM
: o mês atual.DD
: a data atual.HH
: a hora atual.mm
: o minuto atual.
Atualmente, você pode usar modelos para definir caminhos de arquivo em um estágio de destino.
Campos estáticos e dinâmicos
Algumas fases exigem a definição de valores que podem ser cadeias de caracteres estáticas ou um valor dinâmico obtido de um Path
em uma Mensagem. Para definir esses valores, você pode usar campos estáticos ou dinâmicos.
Um campo estático ou dinâmico é sempre escrito como um objeto com um campo type
que tem um dos dois valores: static
ou dynamic
. O esquema varia de acordo com type
.
Campos estáticos
A definição estática é um valor fixo para type
o qual é static
. O valor real é mantido em value
.
Campo | Type | Descrição | Obrigatório | Padrão | Exemplo |
---|---|---|---|---|---|
tipo | cadeia de caracteres const | O tipo do campo. | Sim | - | static |
value | qualquer | O valor estático a ser usado para a configuração (normalmente uma cadeia de caracteres). | Sim | - | "static" |
Os seguintes exemplos mostram algumas definições de campo estático:
{
"some-field": {
"type": "static",
"value": "some-static-value"
}
}
{
"some-boolean-field": {
"type": "static",
"value": true
}
}
{
"some-complex-field": {
"type": "static",
"value": {
"some": [
"nested",
"data"
]
}
}
}
Campos dinâmicos
O valor fixo para type
é dynamic
. O valor é um caminho jq.
Campo | Type | Descrição | Obrigatório | Padrão | Exemplo |
---|---|---|---|---|---|
tipo | cadeia de caracteres const | O tipo do campo | Sim | - | dynamic |
value | Caminho | O caminho em cada mensagem em que um valor para o campo pode ser recuperado dinamicamente. | Sim | - | .systemProperties.partitionKey |
O seguinte exemplo mostra uma definição de campo dinâmico:
{
"some-field": {
"type": "dynamic",
"value": ".systemProperties.topic"
}
}
Tentar novamente
As fases que chamam serviços externos podem usar repetições para lidar com falhas temporárias e aprimorar a confiabilidade. Você pode substituir a política de repetição padrão ao configurar uma fase.
Há quatro políticas de repetição possíveis:
default
: a política de repetição padrão é usar uma repetição de retirada exponencial com três repetições e um intervalo de repetição inicial de 500 ms.none
: nenhuma repetição é executada.fixed
: uma política de repetição fixa tenta a operação novamente um número fixo de vezes, com um intervalo fixo entre cada repetição.exponential
: uma política de repetição exponencial tenta a operação novamente um número fixo de vezes, com um intervalo exponencialmente crescente entre cada repetição.
Se você escolher default
ou none
, não precisará fornecer mais nenhuma configuração. Se você escolher fixed
ou exponential
, precisará fornecer mais configurações:
Fixo
Campo | Type | Descrição | Obrigatório? | Padrão | Exemplo |
---|---|---|---|---|---|
type |
string | O nome do tipo de repetição: fixed |
Sim | N/D | fixed |
interval |
Duration | Tempo inicial entre cada repetição. | Não | 500ms |
2s |
maxRetries |
int | O número de repetições, de 1 a 20 |
Não | 3 |
20 |
Exponencial
Campo | Type | Descrição | Obrigatório? | Padrão | Exemplo |
---|---|---|---|---|---|
type |
string | O nome do tipo de repetição: exponential |
Sim | N/D | exponential |
interval |
Duration | Tempo inicial entre cada repetição. | Não | 500ms |
2s |
maxRetries |
int | O número de repetições, de 1 a 20 |
Não | 3 |
20 |
maxInterval |
Duration | Tempo máximo entre cada repetição. | Não | Nenhum | 100s |
Os tempos de repetição exponencial são calculados da seguinte maneira: se o intervalo começar com 500ms
, os próximos intervalos de repetição serão randInt(500ms, 500ms * 2^1)
, randInt(500ms, 500ms * 2^2)
, …, randInt(500ms, 500ms * 2^maxRetries)
.
Lote
Vários destinos no estágio de saída permitem enviar mensagens em lote antes de gravarem no destino. Esses destinos usam o lote para definir os parâmetros de envio em lote.
Atualmente, você pode definir o lote com base no tempo. Para definir o envio em lote, você precisa especificar o intervalo de tempo e um caminho. Path
define qual parte da mensagem de entrada deve ser incluída na saída em lote.
Campo | Type | Descrição | Obrigatório | Padrão | Exemplo |
---|---|---|---|---|---|
Hora | Duration | Quanto tempo os dados em lote | Não | 60s (em destinos em que o envio em lote é imposto) |
120s |
Caminho | Caminho | O caminho para o valor em cada mensagem a ser incluída na saída. | Não | .payload |
.payload.output |