Compartir vía


¿Qué son los patrones de configuración en la versión preliminar del procesador de datos de Azure IoT?

Importante

Operaciones de IoT de Azure, habilitado por Azure Arc, está actualmente en VERSIÓN PRELIMINAR. No se debería usar este software en versión preliminar en entornos de producción.

Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.

Varios tipos de configuración son comunes a varias fases de canalización. En este artículo se describe la ruta de acceso, lote,plantillas,reintentoy duración patrones de configuración.

Path

Varias fases de canalización usan una ruta de acceso para identificar una ubicación en el mensaje en donde se deben leer o escribir datos. Para definir estas ubicaciones, usará un campo Path que emplea la sintaxis jq:

  • Una ruta de acceso se define como una cadena de la interfaz de usuario que usa la sintaxis jq.
  • Una ruta de acceso se define en relación con la raíz del mensaje del procesador de datos. La ruta de acceso . hace referencia a todo el mensaje.
  • Todas las rutas de acceso comienzan por ..
  • Cada segmento de ruta de acceso puede ser:
    • .<identifier> para una clave de objeto alfanumérica, como .topic.
    • ."<identifier>" para una clave de objeto arbitraria, como ."asset-id".
    • ["<identifier>"] para una clave de objeto arbitraria, como ["asset-id"].
    • [<index>] para un índice de matriz, como [2].
  • Los segmentos se pueden encadenar para formar rutas de acceso complejas.

Los segmentos de ruta de acceso individuales deben ajustarse a las siguientes expresiones regulares:

Patrón Regex Ejemplo
.<identifier> \.[a-zA-Z_][a-zA-Z0-9_]* .topic
."<identifier>" \."(\\"\|[^"])*" ."asset-id"
["<identifier>"] \["(\\"\|[^"])*"\] ["asset-id"]
[<index>] \[-?[0-9]+\] [2]

Para más información, consulte Rutas de acceso en la guía de jq.

Ejemplos de rutas de acceso

Las rutas de acceso siguientes son ejemplos basados en la estructura estándar de Mensaje del procesador de datos:

  • .systemProperties devuelve lo siguiente:

    {
      "partitionKey": "foo",
      "partitionId": 5,
      "timestamp": "2023-01-11T10:02:07Z"
    }
    
  • .payload.humidity devuelve lo siguiente:

    10
    
  • .userProperties[0] devuelve lo siguiente:

    {
      "key": "prop1",
      "value": "value1"
    }
    
    
  • .userProperties[0].value devuelve lo siguiente:

    value1
    

Duration

Varias fases requieren la definición de una duración de intervalo de tiempo. Por ejemplo, ventanas de una fase de agregado y tiempos de espera de una fase de llamada. Estas fases usan un campo Duration para representar este valor.

Varias fases de canalización usan una duración de intervalo de tiempo. Por ejemplo, la fase de agregado tiene una propiedad windows y las fases de llamada tienen una propiedad timeouts. Para definir estos intervalos de tiempo, usará un campo Duration:

La duración es un valor de cadena con el siguiente formato <number><char><number><char>, donde "char" puede ser:

  • h: hora.
  • m: minuto.
  • s: segundo.
  • ms: milisegundo.
  • us, µs: microsegundo.
  • ns: nanosegundo.

Ejemplos de duración

  • 2h
  • 1h10m30s
  • 3m9ms400ns

Plantillas

Varias fases requieren definir una cadena con una combinación de valores estáticos y dinámicos. Estas fases usan valores de plantilla.

Las plantillas de procesador de datos usan sintaxis Mustache para definir valores dinámicos en cadenas.

Los valores del sistema dinámicos disponibles para su uso en plantillas son:

  • instanceId: el identificador de instancia del procesador de datos.
  • pipelineId: el identificador de canalización del que forma parte la fase.
  • YYYY: el año actual.
  • MM: el mes actual.
  • DD: la fecha actual.
  • HH: la hora actual.
  • mm: el minuto actual.

Actualmente, puede usar plantillas para definir rutas de acceso de archivo en una fase de destino.

Campos estáticos y dinámicos

Algunas fases requieren la definición de valores que pueden ser cadenas estáticas o un valor dinámico derivado de un Path en un Mensaje. Para definir estos valores, puede usar campos estáticos o dinámicos.

Un campo estático o dinámico siempre se escribe como un objeto con un campo type que tiene uno de dos valores: static o dynamic. El esquema varía en función de type.

Campos estáticos

La definición estática es un valor fijo de type, que es static. El valor real se conserva en value.

Campo Tipo Descripción Necesario Valor predeterminado Ejemplo
type const string El tipo del campo. - static
value cualquiera El valor estático que se va a usar para la configuración (normalmente una cadena). - "static"

En los ejemplos siguientes se muestran algunas definiciones de campo estáticas:

{
    "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

El valor fijo de type es dynamic. El valor es una ruta de acceso jq.

Campo Tipo Descripción Necesario Valor predeterminado Ejemplo
type const string Tipo del campo. - dynamic
value Path La ruta de acceso de cada mensaje donde se puede recuperar dinámicamente un valor para el campo. - .systemProperties.partitionKey

En el ejemplo siguiente se muestra una definición de campo dinámico:

{
    "some-field": {
        "type": "dynamic",
        "value": ".systemProperties.topic"
    }
}

Volver a intentar

Las fases que llaman a servicios externos pueden usar reintentos para controlar errores temporales y mejorar la confiabilidad. Puede invalidar la directiva de reintento predeterminada al configurar una fase.

Hay cuatro directivas de reintento posibles:

  • default: La directiva de reintento predeterminada es usar un reintento de retroceso exponencial con tres reintentos y un intervalo de reintento inicial de 500 ms.
  • none: No se realizan reintentos.
  • fixed: Una directiva de reintentos fija intenta un número fijo de veces con un intervalo fijo entre cada reintento.
  • exponential: Una directiva de reintentos exponencial reintenta un número fijo de veces con un intervalo exponencialmente creciente entre cada reintento.

Si elige default o none, no es necesario proporcionar más configuración. Si elige fixed o exponential, debe proporcionar más configuración:

Fijo

Campo Tipo Description ¿Necesario? Valor predeterminado Ejemplo
type string Nombre del tipo de reintento: fixed N/D fixed
interval Duration Período de tiempo inicial entre cada reintento. No 500ms 2s
maxRetries int Número de reintentos, de 1 a 20 No 3 20

Exponencial

Campo Tipo Description ¿Necesario? Valor predeterminado Ejemplo
type string Nombre del tipo de reintento: exponential N/D exponential
interval Duration Período de tiempo inicial entre cada reintento. No 500ms 2s
maxRetries int Número de reintentos, de 1 a 20 No 3 20
maxInterval Duration Período de tiempo máximo entre cada reintento. No Ninguno 100s

Los tiempos de reintento exponencial se calculan de la siguiente manera: si el intervalo comienza con 500ms, los siguientes intervalos de reintento son randInt(500ms, 500ms * 2^1), randInt(500ms, 500ms * 2^2)... , randInt(500ms, 500ms * 2^maxRetries).

Batch

Varios destinos de la fase de salida permiten procesar por lotes los mensajes antes de escribirlos en el destino. Estos destinos usan lotes para definir los parámetros de procesamiento por lotes.

Actualmente, puede definir lotes en función del tiempo. Para definir el procesamiento por lotes, debe especificar el intervalo de tiempo y una ruta de acceso. Path define la parte del mensaje entrante que se va a incluir en la salida procesada por lotes.

Campo Tipo Descripción Necesario Valor predeterminado Ejemplo
Time Duration Cuánto tiempo procesar los datos por lotes No 60s (en destinos en los que se aplica el procesamiento por lotes). 120s
Path Path Ruta de acceso al valor de cada mensaje que se va a incluir en la salida. No .payload .payload.output