Share via


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: hora
  • m: minuto
  • s: segundo
  • ms: milissegundo
  • us, µs: microssegundo
  • ns: 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