Definición
La etapa $emit especifica una conexión en el Registro de Conexiones a la que emitir mensajes. Se admiten los siguientes tipos de conexión:
Apache Kafka broker
MongoDB colección de series de tiempo
AWS Kinesis flujo de datos
AWS CuboS3
Almacenamiento de blobs de Azure
Google Cloud Pub/Sub
Ubicación
$emit debe ser la última etapa de cualquier pipeline en la que aparezca. Solo se puede utilizar una etapa $emit por pipeline.
Sintaxis
Apache Kafka Broker
Para escribir datos procesados en un broker de Apache Kafka, utilice la $emit etapa de canalización con el siguiente formato de prototipo:
{ "$emit": { "connectionName": "<registered-connection>", "topic": "<target-topic>" | <expression>, "schemaRegistry": { "connectionName": "<schema-registry-name>", "valueSchema": { type: "<schema-type>", schema: <schema-name>, options: { subjectNameStrategy: "<topic-name-strategy>", autoRegisterSchemas: true } } }, "config": { "acks": <number-of-acknowledgements>, "compression_type": "<compression-type>", "dateFormat": "default" | "ISO8601", "headers": "<expression>", "key": "<key-string>" | { key-document }, "keyFormat": "<serialization-type>", "outputFormat": "basicJson" | "canonicalJson" | "relaxedJson", "tombstoneWhen": <expression> } } }
La etapa $emit procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción | |||||
|---|---|---|---|---|---|---|---|---|
| string | Requerido | Nombre, tal como aparece en el Registro de Conexiones, de la conexión desde la cual se ingieren datos. | |||||
| string o expresión | Requerido | Nombre del tema de Apache Kafka al que emitir los mensajes. | |||||
| Documento | Opcional | Documento que permite el uso de un Registro de Esquemas para apoyar la escritura en un formato serializado Avro fuente. Para habilitar esta funcionalidad, debe crear una conexión con el Registro de esquemas. | |||||
| string | Condicional | Nombre de la conexión del Registro de esquemas que se utilizará para la deserialización de Avro. | |||||
| documento | expresión | Condicional | Documento que define las propiedades de su esquema de serialización, o una expresión que se evalúe como tal. | |||||
| string | Condicional | El tipo de serialización para el que se utilizará el registro de esquema. Atlas Stream Processing actualmente admite la serialización | |||||
| Documento | Condicional | Documento que define la declaración de esquema. | |||||
| Documento | Opcional | Documento que define los parámetros de configuración opcionales para la conexión de tu registro de esquema. | |||||
| booleano | Opcional | Alternar para determinar si se deben registrar automáticamente los esquemas al procesar documentos con esquemas no reconocidos. Si se establece en false, los documentos con esquemas no reconocidos se envían a la fila de letra muerta. Se establece por defecto en | |||||
| string | Condicional | Método para determinar el nombre del sujeto de los esquemas registrados automáticamente. Debe ser uno de los siguientes:
Por defecto es | |||||
| Documento | Opcional | Documento que contiene campos que sobrescriben diversos valores por defecto. | |||||
| string | Opcional | Número de confirmaciones requeridas del clúster Apache Kafka para una El valor por defecto es
| |||||
| string | Opcional | Tipo de compresión para todos los datos generados por el productor. La configuración por defecto es ninguna (es decir, sin compresión). Los valores válidos son:
La compresión se utiliza para lotes completos de datos, por lo que la eficacia del agrupamiento impacta en la relación de compresión; más agrupamiento resulta en una mejor compresión. | |||||
| string | Opcional | Formato de fecha para el valor de fecha. Los valores válidos son:
Por ejemplo: Considera la siguiente entrada. Si Si | |||||
| expresión | Opcional | Encabezados que se añadirán al mensaje de salida. Debe especificar En tiempo de ejecución, la expresión debe evaluarse como el objeto de encabezados completo o una matriz de documentos Si la expresión se evalúa como un objeto, Atlas Stream Processing construye un encabezado a partir de cada par clave-valor de ese objeto, donde la clave es el nombre del encabezado y el valor es el valor del encabezado. Si la expresión se evalúa como un arreglo, debe tener la forma de un arreglo de objetos de pares clave-valor. Por ejemplo: Atlas Stream Processing construye un encabezado a partir de cada objeto del arreglo, donde la clave es el nombre del encabezado y el valor es el valor del encabezado. Atlas Stream Processing admite los valores de encabezado de los siguientes tipos:
Para aprender a crear encabezados a partir de valores de campo o metadatos de flujo, consulte Encabezados dinámicos de Kafka. | |||||
| objeto | string | expresión | Opcional | Expresión que se evalúa como una clave de mensaje de Apache Kafka. Si especificas | |||||
| string | Condicional | Tipo de datos utilizado para serializar datos clave de Apache Kafka. Debe ser uno de los siguientes valores:
Por defecto será | |||||
| string | Opcional | Formato JSON a usar al emitir mensajes a Apache Kafka. Debe ser uno de los siguientes valores:
Se establece por defecto en Para aprender más, consulta JSON básico. | |||||
| expresión | Opcional | Expresión que determina cuándo emitir Si la expresión no puede evaluarse como un valor booleano, o no puede evaluarse, Atlas Stream Processing escribe el documento en la DLQ. Esta configuración se puede utilizar para habilitar la compactación de temas si se proporcionan valores de |
Atlas colección de series de tiempo
Para guardar datos procesados en una colección de series de tiempo de Atlas, utiliza la etapa de pipeline $emit con el siguiente formulario prototipo:
{ "$emit": { "connectionName": "<registered-connection>", "db": "<target-db>" | <expression>, "coll": "<target-coll>" | <expression>, "parallelism": <number>, "timeseries": { <options> } } }
La etapa $emit procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| string | Requerido | Nombre, tal como aparece en el Registro de Conexiones, de la conexión desde la cual se ingieren datos. |
| string | expresión | Requerido | Nombre de, o expresión que resuelve a, la base de datos de Atlas que contiene la colección de series de tiempo objetivo. |
| string | expresión | Requerido | Nombre de o expresión que se resuelve en la colección de series de tiempo Atlas a la que guardar. |
| entero | Opcional | Número de hilos de escritura interna que utiliza el operador de almacenamiento en serie temporal para escribir datos en la colección de series de tiempo. Esto mejora el rendimiento para cargas de trabajo de alto volumen al distribuir las operaciones de escritura entre múltiples hilos. Se establece por defecto en El valor máximo que puede establecer depende del nivel de su procesador de transmisión. Para obtener más información, consulte Guía de selección de nivel de Atlas Stream Processing. Cada procesador de flujo tiene un valor máximo de paralelismo acumulado determinado por su nivel. El paralelismo acumulativo de un procesador de flujo se calcula de la siguiente manera:
Donde Por ejemplo, si tu etapa Si un procesador de flujo supera el paralelismo acumulativo máximo para su nivel, Atlas Stream Processing genera un error e informa del nivel mínimo de procesador requerido para el nivel de paralelismo previsto. Debe escalar el procesador a un nivel superior o reducir los valores de paralelismo de sus etapas para resolver el error. Para aprender más, consulte Procesamiento de flujos. |
| Documento | Opcional | Documento que define los campos de serie de tiempo de la colección. |
Nota
El tamaño máximo para documentos dentro de una colección de series de tiempo es 4 MB. Para obtener más información, consulta Limitaciones de la colección de series de tiempo.
Importante
Requisitos de expresión dinámica
Al utilizar expresiones para los campos db o coll, debe especificar la opción timeField en la configuración timeseries. Esto garantiza que Atlas Stream Processing pueda crear correctamente colecciones de series temporales cuando la colección de destino no existe.
Por ejemplo:
{ "$emit": { "connectionName": "atlas1", "db": "$targetDatabase", "coll": "$targetCollection", "timeseries": { "timeField": "timestamp" } } }
AWS Kinesis
Atlas Stream Processing admite la creación de conexiones Private Link con flujos AWS Kinesis. Para obtener más información, consulte Agregar una conexión privada de Kinesis.
Para escribir datos procesados en AWS Kinesis, utilice la etapa de canalización $emit con el siguiente formulario prototipo:
{ "$emit": { "connectionName": "<registered-connection>", "stream": "<stream-name>", "region": "<aws-region>", "partitionKey": "<key>" | <field> | <expression> "config": { "outputFormat": "basicJson" | "canonicalJson" | "relaxedJson", "dateFormat": "default" | "ISO8601", } } }
La etapa $emit procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción | |||
|---|---|---|---|---|---|---|
| string | Requerido | Nombre, tal como aparece en el Registro de Conexiones, de la conexión desde la cual se ingieren datos. | |||
| string | Requerido | Nombre del flujo de datos de Kinesis al que conectarse. | |||
| string | Opcional | Región en la que opera el flujo de datos de Kinesis. AWS admite múltiples flujos con el mismo nombre, cada uno en una región distinta. Este parámetro permite a Atlas Stream Processing distinguir entre tales flujos. | |||
| string | expresión | Requerido | Clave utilizada para determinar qué partición de Kinesis recibe cada registro. Debe ser una cadena literal o una expresión que se evalúe como una string. | |||
| Documento | Opcional | Documento que contiene campos que sobrescriben diversos valores por defecto. | |||
| string | Opcional | Formato JSON a utilizar al emitir mensajes a Kinesis. Debe ser uno de los siguientes valores:
Se establece por defecto en Para aprender más, consulta JSON básico. | |||
| string | Opcional | Formato de fecha para el valor de fecha. Los valores válidos son:
Por ejemplo: Considera la siguiente entrada. Si Si |
AWS S3
Para escribir datos procesados en una conexión de destino de bucket S3 de AWS, utilice la etapa de canalización $emit con el siguiente formulario prototipo:
{ "$emit": { "connectionName": "<registered-connection>", "bucket": "<target-bucket>" | <expression>, "region": "<target-region>", "path": "<key-prefix>" | <expression>, "parallelism": <number>, "partitionBy": <expression>, "config": { "writeOptions": { "count": <doc-count>, "bytes": <threshold>, "interval": { "size": <unit-count>, "unit": "<time-denomination>" } }, "delimiter": "<delimiter>", "outputFormat": "basicJson" | "canonicalJson" | "relaxedJson", "dateFormat": "default" | "ISO8601", "compression": "gzip" | "snappy", "compressionLevel": <level> } } }
La etapa $emit procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción | |||
|---|---|---|---|---|---|---|
| string | Requerido | Nombre, tal como aparece en el Registro de Conexiones, de la conexión a la que se va a guardar datos. | |||
| string | expresión | Requerido | Nombre del depósito S3 en el que se escribirán los datos, especificado como una cadena literal o una expresión que se evalúe como una cadena. | |||
| string | Opcional | Nombre de la región de AWS en la que se encuentra el bucket de destino. Si aloja su espacio de trabajo de Stream Processing en una región de AWS, este parámetro se establece de forma predeterminada en esa región. De lo contrario, se selecciona por defecto la región AWS más cercana a la región anfitriona de tu espacio de trabajo de Stream Processing. | |||
| string | expresión | Requerido | Prefijo de la clave de los objetos escritos en el bucket S3. Debe ser una cadena de prefijo literal o una expresión que se evalúe como una cadena. | |||
| entero | Opcional | Número de hilos internos de guardar que el operador sink S3 utiliza para guardar datos a S3. Esto mejora el rendimiento para cargas de trabajo de alto volumen al distribuir las operaciones de escritura entre múltiples hilos. Se establece por defecto en El valor máximo que puede establecer depende del nivel de su procesador de transmisión. Para obtener más información, consulte Guía de selección de nivel de Atlas Stream Processing. Cada procesador de flujo tiene un valor máximo de paralelismo acumulado determinado por su nivel. El paralelismo acumulativo de un procesador de flujo se calcula de la siguiente manera:
Donde Por ejemplo, si tu etapa Si un procesador de flujo supera el paralelismo acumulativo máximo para su nivel, Atlas Stream Processing genera un error e informa del nivel mínimo de procesador requerido para el nivel de paralelismo previsto. Debe escalar el procesador a un nivel superior o reducir los valores de paralelismo de sus etapas para resolver el error. Para aprender más, consulte Procesamiento de flujos. | |||
| expresión | Opcional | Expresión que determina cómo se dividen los documentos entre los hilos de guardar cuando Si | |||
| Documento | Opcional | Documento que contiene parámetros adicionales que anulan varios valores por defecto. | |||
| Documento | Opcional | Documento que contiene parámetros adicionales que rigen el comportamiento de guardar. Estos parámetros desencadenan un comportamiento de escritura según el umbral que se cumpla primero. Por ejemplo, si los documentos ingeridos alcanzan el umbral | |||
| entero | Opcional | Número de documentos a agrupar en cada archivo escrito en S3. | |||
| entero | Opcional | Especifica el número mínimo de bytes que deben acumularse antes de que un archivo se escriba en S3. El recuento de bytes viene determinado por el tamaño de los documentos BSON procesados por la canalización, no por el tamaño del archivo de salida final. Por defecto, 32 MB. | |||
| Documento | Opcional | Especifica un temporizador para la escritura masiva de documentos como una combinación de Por defecto 1 minuto. No puedes establecer el | |||
| entero | Condicional | El número de unidades especificadas por Por defecto será | |||
| string | Condicional | La denominación de tiempo en la que contabilizar el temporizador de guardado masivo. Este parámetro admite los siguientes valores:
Por defecto será | |||
| string | Opcional | Delimitador entre cada entrada en el archivo emitido. Se establece por defecto en | |||
| string | Opcional | Especifica el formato de salida del JSON escrito en S3. Debe ser uno de los siguientes valores:
El valor por defecto es " Para aprender más, consulte JSON básico y JSON extendido. | |||
| string | Opcional | Formato de fecha para el valor de fecha. Los valores válidos son:
Por ejemplo, si agregas el siguiente registro a la pipeline: entonces si Si | |||
| string | Opcional | Nombre del algoritmo de compresión a utilizar. Debe ser uno de los siguientes valores:
| |||
| entero | Condicional | Nivel de compresión que se aplicará al mensaje generado. Admite valores Se establece por defecto en Este parámetro solo es válido cuando |
Almacenamiento de blobs de Azure
Para escribir datos procesados en Azure Blob Storage, utilice la etapa de canalización $emit con el siguiente formulario prototipo:
{ "$emit": { "connectionName": "<registered-connection>", "container": "<storage-container>", "path": "<prefix-key>" | <expression>, "parallelism": <int>, "partitionBy": "<key>" | <expression>, "config": { "dateFormat": "default" | "ISO8601", "compression": "none" | "gzip" | "snappy", "compressionLevel": [1-9], "outputFormat": "relaxedJson" | "canonicalJson" | "basicJson", "delimiter": "<delimiter>", "writeOptions": { "count": <int>, "interval": { "size": <int>, "unit": "ms" | "second" | "minute" | "hour" | "day" }, "bytes": <int> } } } }
La etapa $emit procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción | |||
|---|---|---|---|---|---|---|
| string | Requerido | Nombre, tal como aparece en el Registro de Conexiones, de la conexión en la que se guardarán datos. | |||
| string | Requerido | Contenedor de almacenamiento en el que guardar blobs. | |||
| string | expresión | Requerido | Prefijo de la clave de los objetos guardados en Azure Blob Storage. Debe ser un string literal o una expresión que se evalúe como un string. | |||
| Documento | Opcional | Documento que contiene parámetros adicionales que anulan varios valores por defecto. | |||
| string | Opcional | Formato de fecha para el valor de fecha. Los valores válidos son:
Por ejemplo, si agregas el siguiente registro a la pipeline: entonces si Si | |||
| string | Opcional | Nombre del algoritmo de compresión a utilizar. Debe ser uno de los siguientes valores:
Si no especifica un valor para este campo, Atlas Stream Processing escribe los datos sin compresión. | |||
| entero | Condicional | Nivel de compresión que se aplicará al mensaje generado. Admite valores Se establece por defecto en Este parámetro solo es válido cuando | |||
| string | Opcional | Especifica el formato de salida del JSON escrito en Azure Blob almacenamiento. Debe ser uno de los siguientes valores:
Se establece por defecto en Para aprender más, consulte JSON básico y JSON extendido. | |||
| string | Opcional | Delimitador entre cada entrada en el archivo emitido. Se establece por defecto en | |||
| Documento | Opcional | Documento que contiene parámetros adicionales que rigen el comportamiento de guardar. Estos parámetros desencadenan un comportamiento de escritura según el umbral que se cumpla primero. Por ejemplo, si los documentos ingeridos alcanzan el umbral | |||
| entero | Opcional | Número de documentos a agrupar en cada archivo escrito en Azure Blob Storage. | |||
| entero | Opcional | Especifica el número mínimo de bytes que deben acumularse antes de que un archivo se escriba en el almacenamiento de blobs de Azure. La cantidad de bytes se determina por el tamaño de los documentos BSON procesados en el pipeline, no por el tamaño del archivo de salida final. Por defecto, 32 MB. | |||
| Documento | Opcional | Especifica un temporizador para la escritura masiva de documentos como una combinación de Por defecto 1 minuto. No puedes establecer el | |||
| entero | Condicional | El número de unidades especificado por Por defecto será | |||
| string | Condicional | La denominación de tiempo en la que contabilizar el temporizador de guardado masivo. Este parámetro admite los siguientes valores:
Por defecto será | |||
| entero | Opcional | Número de hilos de guardar internos que usa Atlas Stream Processing para guardar datos en Azure Blob almacenamiento. Esto mejora el rendimiento para cargas de trabajo de alto volumen al distribuir las operaciones de escritura en múltiples hilos. Por defecto | |||
| string | expresión | Opcional | String o expresión que determina cómo Atlas Stream Processing particiona los documentos entre los hilos de guardado cuando Si |
Google Cloud Pub/Sub
Para guardar datos procesados en Google Cloud Pub/Sub, utiliza la etapa de pipeline $emit con el siguiente formulario prototipo:
{ "$emit": { "connectionName": "<registered-connection>", "topic": "<topic>" | <expression>, "projectId": "<project-id>", "region": "<pubsub-region>", "orderingKey": "<key>" | <expression>, "attributes": { "<key1>": "<value1>" | <expression>, . . . "<keyN>": "<valueN>" | <expression> }, "config": { "dateFormat": "default" | "ISO8601", "outputFormat": "relaxedJson"| "canonicalJson" | "basicJson", } } }
La etapa $emit procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción | |||
|---|---|---|---|---|---|---|
| string | Requerido | Nombre, tal como aparece en el Registro de Conexiones, de la conexión en la que se guardarán datos. | |||
| string | Requerido | ID del proyecto al que se debe publicar. | |||
| string | expresión | Requerido | Nombre del tema dentro del proyecto dado en el cual publicar mensajes. Debe ser un string o una expresión que evalúe a un string. | |||
| string | Requerido | El punto final de ubicación al que se enviarán las solicitudes. Para conocer las regiones disponibles, consulte la documentación de Pub/Sub. | |||
| string | expresión | Opcional | Clave en los datos publicados para ordenar la publicación del mensaje. Si estableces un Utiliza un valor de string para este campo a fin de establecer un | |||
| Documento | Opcional | Documento que define los atributos que se deben agregar a los mensajes. Los atributos adoptan la forma de pares clave-valor donde:
| |||
| Documento | Opcional | Documento que contiene parámetros adicionales que anulan varios valores por defecto. | |||
| string | Opcional | Formato de fecha para el valor de fecha. Los valores válidos son:
Por ejemplo, si agregas el siguiente registro a la pipeline: entonces si Si | |||
| string | Opcional | Especifica el formato de salida del JSON escrito en Google Cloud Pub/Sub. Debe ser uno de los siguientes valores:
Se establece por defecto en Para aprender más, consulte JSON básico y JSON extendido. |
Basic JSON
Para facilitar la ingesta de mensajes, la etapa $emit admite la escritura de datos procesados en destinos en el formato JSON básico, que simplifica los formatos JSON extendido (canonicalJson) y JSON extendido relajado (relaxedJson). JSON básico no utiliza los contenedores JSON extendido de MongoDB y, por tanto, no conserva todos los BSON types.
Se puede especificar el formato JSON básico configurando el campo config.outputFormat en "basicJson" en la etapa $emit.
La siguiente tabla proporciona ejemplos de estas simplificaciones para todos los campos afectados.
tipo de campo | relaxedJson | basicJson |
|---|---|---|
Binario |
|
|
fecha |
|
|
Decimal |
|
|
Marca de tiempo |
|
|
ObjectId |
|
|
Infinito negativo |
|
|
Infinito positivo |
|
|
Expresiones regulares |
|
|
UUID |
|
|
Comportamiento
Solo puedes guardar en una única colección de series de tiempo de Atlas por procesador de flujos. Si especificas una colección que no existe, Atlas crea la colección con los campos de serie de tiempo que especificaste. Debes especificar una base de datos existente.
Atlas Stream Processing no admite la escritura de documentos BSON de tamaño superior a 16MB con la etapa $emit en un destino de almacenamiento de blobs de AWS o Azure. Puede aumentar este límite hasta 125MB si el origen de su procesador de flujo no es una implementación de MongoDB, o si etapas anteriores de la canalización, como $lookup, aumentan el tamaño de sus documentos.
La variante Azure Blob Storage $emit también admite la escritura en contenedores Azure Data Lake Storage v2.
La variante $emit de GCP Pub/Sub permite definir valores mediante expresiones de rutas de campos tanto para el campo orderingKey como para los pares clave-valor en el campo attributes. En caso de error de la expresión o si la expresión no se resuelve como una string, Atlas Stream Processing envía el mensaje afectado a la fila de letra muerta.
Puedes utilizar un campo o una expresión dinámica como valor del campo topic para que tu procesador de flujo pueda guardar en diferentes destinos mensaje a mensaje. La expresión debe evaluarse como una string.
Ejemplo
Tienes un flujo de eventos de transacciones que genera mensajes de la siguiente forma:
{ "customer": "Very Important Industries", "customerStatus": "VIP", "tenantId": 1, "transactionType": "subscription" } { "customer": "N. E. Buddy", "customerStatus": "employee", "tenantId": 5, "transactionType": "requisition" } { "customer": "Khan Traktor", "customerStatus": "contractor", "tenantId": 11, "transactionType": "billableHours" }
Para clasificar cada uno de estos en un tema de Apache Kafka distinto, puedes escribir la siguiente etapa $emit:
{ "$emit": { "connectionName": "kafka1", "topic": "$customerStatus" } }
Esta $emit etapa:
Guarda el mensaje
Very Important Industriesen un tema llamadoVIP.Guarda el mensaje
N. E. Buddyen un tema llamadoemployee.Guarda el mensaje
Khan Traktoren un tema llamadocontractor.
Para obtener más información sobre las expresiones dinámicas, consulta operadores de expresiones.
Si se especifica un tema que no existe aún, Apache Kafka crea automáticamente el tema cuando recibe el primer mensaje que lo dirige.
Si se especifica un tema con una expresión dinámica, pero Atlas Stream Processing no puede evaluar la expresión para un mensaje dado, Atlas Stream Processing envía ese mensaje a la fila de letra muerta si está configurada y procesa los siguientes mensajes. Si no se configura una fila de letra muerta, entonces Atlas Stream Processing omite el mensaje por completo y procesa los mensajes siguientes.
Encabezados dinámicos de Kafka
Para construir encabezados de Apache Kafka dinámicamente, cree el objeto de encabezado completo en una etapa anterior de la canalización y luego haga referencia a ese objeto desde $emit.config.headers. Use $setStreamMeta cuando los encabezados sean metadatos de transporte que no deban aparecer en el cuerpo del mensaje emitido:
{ "$setStreamMeta": { "stream.kafka_headers": { "$arrayToObject": [ { "k": "test_header", "v": "$myField" } ] } } }, { "$emit": { "connectionName": "kafka", "topic": "my-topic", "config": { "headers": { "$meta": "stream.kafka_headers" } } } }
Ejemplos
Una fuente de datos de transmisión genera informes meteorológicos detallados desde varias ubicaciones, cumpliendo con el esquema del Conjunto de Datos Meteorológicos de Muestra. La siguiente agregación tiene tres etapas:
La etapa establece
$sourceuna conexión con el broker Apache Kafka que recopila estos informes en un temamy_weatherdatallamado, exponiendo cada registro a medida que se ingiere a las etapas de agregación subsiguientes. Esta etapa también sobrescribe el nombre del campo de marca de tiempo que proyecta, estableciéndoloingestionTimeen.La etapa
$matchexcluye documentos que tienen unairTemperature.valuede mayor o igual a30.0y pasa los documentos con unairTemperature.valuemenor que30.0a la siguiente etapa.La etapa
$addFieldsenriquece el flujo con metadatos.La etapa
$emitescribe la salida en un tema denominadostreama través de la conexión del broker de KafkaweatherStreamOutput.
{ "$source": { "connectionName": "sample_weatherdata", "topic": "my_weatherdata", "tsFieldName": "ingestionTime" } }, { "$match": { "airTemperature.value": { "$lt": 30 } } }, { "$addFields": { "processorMetadata": { "$meta": "stream" } } }, { "$emit": { "connectionName": "weatherStreamOutput", "topic": "stream" } }
Los documentos del tema stream toman la siguiente forma:
{ "st": "x+34700+119500", "position": { "type": "Point", "coordinates": [122.8, 116.1] }, "elevation": 9999, "callLetters": "6ZCM", "qualityControlProcess": "V020", "dataSource": "4", "type": "SAO", "airTemperature": { "value": 6.7, "quality": "9" }, "dewPoint": { "value": 14.1, "quality": "1" }, "pressure": { "value": 1022.2, "quality": "1" }, "wind": { "direction": { "angle": 200, "quality": "9" }, "type": "C", "speed": { "rate": 35, "quality": "1" } }, "visibility": { "distance": { "value": 700, "quality": "1" }, "variability": { "value": "N", "quality": "1" } }, "skyCondition": { "ceilingHeight": { "value": 1800, "quality": "9", "determination": "9" }, "cavok": "N" }, "sections": ["AA1", "AG1", "UG1", "SA1", "MW1"], "precipitationEstimatedObservation": { "discrepancy": "0", "estimatedWaterDepth": 999 }, "atmosphericPressureChange": { "tendency": { "code": "4", "quality": "1" }, "quantity3Hours": { "value": 3.8, "quality": "1" }, "quantity24Hours": { "value": 99.9, "quality": "9" } }, "seaSurfaceTemperature": { "value": 9.7, "quality": "9" }, "waveMeasurement": { "method": "M", "waves": { "period": 8, "height": 3, "quality": "9" }, "seaState": { "code": "00", "quality": "9" } }, "pastWeatherObservationManual": { "atmosphericCondition": { "value": "6", "quality": "1" }, "period": { "value": 3, "quality": "1" } }, "skyConditionObservation": { "totalCoverage": { "value": "02", "opaque": "99", "quality": "9" }, "lowestCloudCoverage": { "value": "00", "quality": "9" }, "lowCloudGenus": { "value": "00", "quality": "1" }, "lowestCloudBaseHeight": { "value": 1750, "quality": "1" }, "midCloudGenus": { "value": "99", "quality": "1" }, "highCloudGenus": { "value": "00", "quality": "1" } }, "presentWeatherObservationManual": { "condition": "52", "quality": "1" }, "atmosphericPressureObservation": { "altimeterSetting": { "value": 1015.9, "quality": "9" }, "stationPressure": { "value": 1026, "quality": "1" } }, "skyCoverLayer": { "coverage": { "value": "08", "quality": "1" }, "baseHeight": { "value": 2700, "quality": "9" }, "cloudType": { "value": "99", "quality": "9" } }, "liquidPrecipitation": { "period": 12, "depth": 20, "condition": "9", "quality": "9" }, "extremeAirTemperature": { "period": 99.9, "code": "N", "value": -30.4, "quantity": "1" }, "ingestionTime": { "$date": "2024-09-26T17:34:41.843Z" } }
Nota
Lo anterior es un ejemplo representativo. Los datos en transmisión no son estáticos, y cada usuario ve documentos distintos.