Analizador

Los analizadores son entidades de configuración que definen cómo se analizan y transforman los mensajes de una clase de mensaje fuente específica en registros de un tipo destino específico.

source-to-target

Una configuración del analizador tiene los siguientes tres componentes:

  1. Asociación de clase de mensaje fuente: Un analizador procesa mensajes fuente de una sola clase de mensaje fuente. Para obtener más información, consulta Clases de mensajes fuente.
  2. Asociación de versión de tipo: Un analizador emite registros .proto de una sola versión de tipo. La configuración de la versión del tipo define qué campos deben estar presentes en el registro .proto emitido y determina su estructura (esquema). Para obtener más información, consulta Type.
  3. Secuencia de comandos de Whistle: Las secuencias de comandos de Whistle definen cómo transformar los mensajes fuente en registros .proto con lógica de asignación, análisis y transformación. Los usuarios escriben los secuencias de comandos de Whistle, pero Manufacturing Data Engine (MDE) proporciona paquetes de configuración para casos de uso típicos. Para obtener más información, consulta la siguiente sección.

Definición de silbido

Whistle es un lenguaje de asignación que se puede usar para convertir datos anidados complejos de un esquema a otro. En la fabricación, los modelos de datos pueden ser complejos y contener muchas estructuras anidadas y repetidas. Esto dificulta expresar la lógica de asignación en un formato de procedimiento. Whistle aborda este problema proporcionando un lenguaje declarativo que te permite definir la lógica de asignación y transformación de forma natural.

Por ejemplo, podrías usar Whistle para armonizar varios modelos de datos de sensores en diferentes fábricas en un modelo de tipo MDE unificado. Los datos de origen pueden contener estructuras anidadas, como una lista de componentes o una jerarquía de atributos. Whistle te permite expresar la lógica de asignación para estas estructuras anidadas de forma natural, sin tener que escribir código procedimental.

Whistle también admite funciones que te permiten desglosar asignaciones complejas que involucran estructuras repetidas en funciones. Esto facilita la comprensión y el mantenimiento de tu código de asignación, y también facilita la reutilización del código.

Whistle ofrece beneficios en comparación con los enfoques basados en procedimientos. Consulta el siguiente ejemplo:

Dada esta carga útil de ejemplo:

{
  "payload": {
    "tag": "vibration-sensor"
  },
  "details": {
    "value": 0.24,
    "timestamp": "2023-06-26 12:19:20.046000 UTC"
  }
}

Y la siguiente secuencia de comandos de Whistle:

package mde

[{
    tagName: $root.payload.tag
    timestamps: {
        eventTimestamp: $root.details.timestamp
    }
    data: {
        numeric: $root.details.value
    }
}]

Si se aplica la secuencia de comandos de Whistle anterior, el analizador produciría un registro .proto como el siguiente:

[
  {
    "tagName": "vibration-sensor",
    "timestamps": {
      "eventTimestamp": "2023-06-26 12:19:20.046000 UTC"
    },
    "data": {
      "value": 0.24
    }
  }
]

Para obtener más información sobre la sintaxis del lenguaje Whistle y las funciones disponibles, consulta la documentación de Whistle.

Comportamiento de los analizadores en el tiempo de ejecución

En el tiempo de ejecución, el analizador recibe todos los mensajes de la clase de mensaje fuente con la que está asociado, aplica el script de Whistle configurado en cada mensaje y emite uno o más registros .proto del tipo configurado.

Los registros .proto emitidos deben cumplir con la configuración de tipo. Si no cumplen con los requisitos, se los mueve a la cola de mensajes no entregados.

Reglas de asociación

Un analizador solo se puede asociar a una sola clase de mensaje y a una sola versión de tipo. Sin embargo, un analizador puede emitir uno o más registros, siempre y cuando sean de la versión del tipo a la que está vinculado el analizador. El resultado de un analizador es un array de objetos de registro .proto.

parser-multiple-proto-records

Emitir más de un registro desde un analizador es útil en situaciones en las que un mensaje fuente contiene un array de lecturas o eventos que deseas desglosar. Los analizadores te permiten "dividir" el mensaje fuente en varios registros .proto para que cada lectura, por ejemplo, se convierta en una fila en una tabla de registros en BigQuery.

Los registros .proto emitidos pueden hacer referencia a cualquier nombre de etiqueta. Este comportamiento es un cambio con respecto a las versiones 1.1 y 1.2, en las que los nombres de las etiquetas se limitaban al tipo. Después de la versión 1.3, los registros de proto de MDE emitidos por cualquier analizador pueden

Esquema de registro de Proto

El esquema JSON al que deben ajustarse los registros de proto depende de lo siguiente:

  1. Arquetipo: Es el arquetipo específico asociado con el tipo.
  2. Configuración del tipo: Es la configuración definida para el tipo.

El arquetipo define el esquema base para los registros. Por ejemplo, un tipo de arquetipo de la familia discrete requiere que los registros .proto contengan valores para los siguientes atributos:

  • tagName
  • timestamps.eventTimestamp
  • data.complex

El tipo puede imponer más restricciones en los registros .proto. Por ejemplo, puedes definir un esquema para el campo data o puedes requerir que los registros .proto proporcionen una referencia a una instancia de metadatos.

Para obtener más información, consulta la referencia de registros .proto.

Búsqueda de datos de referencia

MDE proporciona una función de Whistle personalizada para buscar un valor para una clave proporcionada en un segmento de búsqueda.

Puedes buscar una instancia de bucket de búsqueda por su clave natural llamando a la función mde::lookupByKey en una secuencia de comandos de Whistle. La función toma la búsquedabucketName, bucketVersion y naturalKey de la instancia como argumentos, y devuelve la instancia de metadatos más reciente para la clave natural proporcionada. Puedes usar la instancia para completar campos en un registro .proto en el analizador. Por ejemplo:

"data" : {
  "complex" : {
    "VIN" : mde::lookupByKey("vin-lookup-bucket", input.vinKey, 1).VIN,
    "vin_registration_time" : mde::lookupByKey("vin-lookup-bucket", input.vinKey, 1).vin_registration_time,
    "ResultValue" : 163.0482614,
  }
}

Restricciones de nombres para los analizadores

Un nombre de analizador puede contener lo siguiente:

  • Letras (mayúsculas y minúsculas), números y los caracteres especiales - y _
  • Puede tener hasta 255 caracteres.

Puedes usar la siguiente expresión regular para la validación: ^[a-z][a-z0-9\\-_]{1,255}$.

Si intentas crear una entidad que incumpla las restricciones de nomenclatura, recibirás un 400 error.

Puedes usar la función mde::sanitizeTagName() para asegurarte de que tu nombre cumpla con las restricciones de nomenclatura. Para obtener más información, consulta Funciones de MDE de Whistle.