Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$iceberg etapa de agregación

La $iceberg etapa especifica una conexión en el Registro de conexiones a un bucket S3 de AWS donde puede escribir datos en una tabla de Apache Iceberg.

$iceberg Debe ser la última etapa de cualquier canalización en la que aparezca. Solo se puede usar una etapa $iceberg por canalización.

La etapa de canalización $iceberg tiene la siguiente forma prototipo:

{
"$iceberg": {
"connectionName": "<registered-connection>",
"bucket": "<target-bucket>",
"databaseName": "<database>",
"tableName": "<string>" | <expression>,
"path": "<key-prefix>",
"region": "<target-region>",
"mode": "cdc" | "insert",
"idFieldName": "<field-name>",
"partitionedBy": {
"<column-name>": "<partition-transform>",
. . .
},
"catalog": {
"type": "hadoop" | "glue"
}
}
}

La etapa $iceberg procesa un documento con los siguientes campos:

Campo
Tipo
Necesidad
Descripción

connectionName

string

Requerido

Nombre de la conexión AWS S3 que se utilizará para lecturas y escrituras. Este nombre debe coincidir con el nombre de la conexión en el Registro de conexiones.

bucket

string

Requerido

Nombre del bucket S que3 contiene la base de datos Apache Iceberg de destino.

databaseName

string

Requerido

Nombre de la base de datos Apache Iceberg que contiene la tabla de destino.

tableName

string | expresión

Requerido

Nombre de la tabla de destino de Apache Iceberg. Debe ser una cadena de texto o una expresión que se evalúe como una cadena de texto. Utilice expresiones para el enrutamiento dinámico por documento.

path

string

Requerido

Clave de prefijo de la ruta a su base de datos Apache Iceberg.

region

string

Condicional

Región deAWS del bucket. Requerido para los procesadores de flujo que no se ejecutan en AWS.

mode

string

Opcional

Estrategia para determinar qué operación realizar por cada documento de entrada.

  • "cdc" hace que Atlas Stream Processing determine el tipo de operación leyendo el campo de metadatos stream.source.operationType.

  • "insert" hace que Atlas Stream Processing agregue cada documento a la tabla de destino como una nueva fila, ignorando las declaraciones de tipo de operación en el campo de metadatos stream.source.operationType.

Se establece por defecto en cdc.

idFieldName

string

Opcional

Nombre del campo y de la columna utilizados como clave de fila en el modo cdc.

Se establece por defecto en "_id".

partitionedBy

Documento

Opcional

Especificación de particionamiento. Si no configura este campo, $iceberg establece una transformación de partición predeterminada para la columna idFieldName.

Debe ser un documento que contenga uno o más pares clave-valor. Cada clave debe ser el nombre de una columna sobre la cual realizar una transformación de partición, y cada valor debe ser la transformación de partición a utilizar. La primera transformación de partición debe aplicarse a idFieldName.

El valor de transformación de partición de un campo determinado debe ser uno de los siguientes:

  • "identity"

  • "year"

  • "month"

  • "day"

  • "hour"

  • { truncate: int }

  • { bucket: int }

Para obtener más información sobre las transformaciones de particiones de Apache Iceberg, consulte la documentación de Apache Iceberg.

catalog

Documento

Opcional

Documento que define el catálogo Iceberg a utilizar. Debe ser un documento que contenga el type campo con un valor de "hadoop" "glue"o.

Si utiliza la etapa $iceberg, debe ser la última etapa de su procesador de flujo.

Atlas Stream Processing admite la etapa $iceberg solo para los procesadores de flujo SP10, SP30 y SP50. Su nivel de procesador determina la cantidad máxima de tablas admitidas para el enrutamiento dinámico:

Nivel
Tablas máximas

SP10

5

SP30

10

SP50

50

La $iceberg etapa infiere el esquema de la tabla resultante de Apache Iceberg a partir del esquema de los datos de salida del procesador de flujo. A medida que Atlas Stream Processing detecta nuevos campos en el flujo, el esquema de la tabla evoluciona en consecuencia.

Si especifica una tabla que aún no existe, Apache Iceberg la crea cuando recibe el primer mensaje que la tiene como objetivo.

Atlas Stream Processing garantiza el procesamiento al menos una vez para la salida a las tablas de Apache Iceberg.

Puede utilizar una expresión dinámica como valor del tableName campo. Al usar una expresión dinámica para capturar valores específicos del documento, puede enrutar los documentos de entrada a diferentes tablas según estos valores. La expresión debe evaluarse como una cadena. Para ver un ejemplo, consulte Enrutamiento dinámico. Para obtener más información, consulte Operadores de expresiones.

Si se especifica un tema con una expresión dinámica, pero Atlas Stream Processing no puede evaluar la expresión para un mensaje determinado, lo envía a la cola de mensajes no entregados (si está configurada) y procesa los mensajes subsiguientes. Si no hay ninguna cola de mensajes no entregados configurada, Atlas Stream Processing omite el mensaje por completo y procesa los mensajes subsiguientes.

Atlas Stream Processing realiza una conversión de tipos de BSON a tipos primitivos Iceberg al escribir en tablas en la $iceberg etapa.

BSON
Apache Iceberg Primitivo
Detalles

string

string

int

int

long

long

double

double

bool

boolean

ObjectId

string

Codificado en hexadecimal

UUID

string

UUID en formato de cadena

BinData

binary

No se aplica a UUID

date

timestamptz

Hora UTC, medida al microsegundo.

timestamp

timestamptz

Hora UTC, medida al microsegundo

object

string

Serializado como una cadena JSON básica

array

string

Serializado como una cadena JSON básica

Otros tipos BSON no son compatibles. Atlas Stream Processing envía los documentos con tipos BSON no compatibles a la cola de documentos no entregados (DLQ).

Los siguientes ejemplos ilustran diversas aplicaciones de la etapa $iceberg.

El siguiente ejemplo demuestra cómo escribir el contenido inicial y el flujo de cambios de una base de datos Atlas en una tabla de Apache Iceberg de forma de solo escritura, creando un archivo duradero del historial operativo de esa base de datos. Esta agregación tiene dos etapas:

  1. La etapa establece una conexión con la base de datos Atlas, específicamente con $source la orders colección en la base de datos. Permite la db sincronización inicial para capturar documentos en la base de datos al activarse el procesador y garantiza que cada evento de cambio capture el documento completo.

  2. La $iceberg etapa establece una conexión con el bucket S3 de AWS, escribiendo en una tabla llamada myTable en la iceberg-warehouse/ ruta. Al especificar solo insert operaciones, garantiza un flujo de escritura de solo adición, estilo registro.

{
"$source": {
"connectionName": "atlas1",
"db": "db",
"coll": "orders",
"initialSync": {
"enable": true
},
"config": {
"fullDocument": "required"
}
},
"$iceberg": {
"connectionName": "myS3Connection",
"bucket": "myData",
"path": "iceberg-warehouse/",
"tableName": "myTable",
"mode": "insert"
}
}

El siguiente ejemplo muestra cómo replicar una colección de Atlas en su totalidad en una tabla de Apache Iceberg.

Antes de definir la agregación, establezca la siguiente variable:

const isDeleteExpr = {$eq: [{$meta: "stream.source.operationType"}, "delete"]};

La siguiente agregación agrega, actualiza y elimina entradas de la tabla Apache Iceberg en sincronía con los cambios en la colección de origen de Atlas. Consta de cuatro etapas:

  1. La etapa establece una conexión con la base de datos Atlas, específicamente con $source la orders colección en la base de datos. Permite la db sincronización inicial para capturar documentos en la base de datos al activarse el procesador y garantiza que cada evento de cambio capture el documento completo.

  2. La etapa filtra en $match de operationType modo que solo se procesan los documentos con declaraciones de tipo de operación válidas.

  3. La etapa cambia la raíz del documento dependiendo del tipo de $replaceRoot operación.

    • Para las operaciones de eliminación, se cambia la raíz del documento a la clave del documento. Esto genera un registro de que el documento fue eliminado, pero excluye su contenido de cualquier procesamiento posterior.

    • Para todas las demás operaciones, cambia la raíz del documento a fullDocument, pasando el contenido del documento para su posterior procesamiento, pero excluyendo los metadatos del flujo de cambios.

  4. La $iceberg etapa establece una conexión con el bucket S3 de AWS, escribiendo en una tabla de Apache Iceberg llamada myTable en la iceberg-warehouse/ ruta. En cdc el modo, esta etapa determina la operación a realizar sobre la tabla de Apache Iceberg leyendo el stream.source.operationType campo de metadatos de cada documento.

{
"$source": {
"connectionName": "atlas1",
"db": "db",
"coll": "orders",
"initialSync": {
"enable": true
},
"config": {
"fullDocument": "required"
}
},
"$match": {
"operationType": {
"$in": ["insert", "update", "delete", "replace"]
}
},
"$replaceRoot": {
"newRoot": {
"$cond": {
"if": isDeleteExpr,
"then": "$documentKey",
"else": "$fullDocument"
}
}
}
"$iceberg": {
"connectionName": "myS3Connection",
"bucket": "myData",
"path": "iceberg-warehouse/",
"tableName": "myTable",
"mode": "cdc"
}
}

En el siguiente ejemplo, Atlas Stream Processing utiliza expresiones dinámicas para enrutar documentos de forma dinámica a diversos destinos de salida.

  1. La etapa establece una conexión con la base de datos Atlas, específicamente con las colecciones, y de la base de datos.$source Permite a b c la db sincronización inicial para capturar documentos en la base de datos al activarse el procesador y garantiza que cada evento de cambio capture el documento completo.

  2. La etapa $match filtra los documentos cuyo operationType es uno de "insert", "update", "delete" o "replace".

  3. La etapa cambia la raíz del documento dependiendo del tipo de $replaceRoot operación.

    • Para las operaciones de eliminación, se cambia la raíz del documento a la clave del documento. Esto genera un registro de que el documento fue eliminado, pero excluye su contenido de cualquier procesamiento posterior.

    • Para todas las demás operaciones, cambia la raíz del documento a fullDocument, pasando el contenido del documento para su posterior procesamiento, pero excluyendo los metadatos del flujo de cambios.

  4. La $iceberg etapa establece una conexión con el bucket de AWS S3 myData llamado, escribiendo en una tabla de Apache Iceberg en la iceberg-warehouse/ ruta. Determina el nombre de la tabla según el nombre de la fuente,collection obtenido de los metadatos del documento. También determina la operación a realizar según los metadatos del documento.

{
"$source": {
"connectionName": "atlas1",
"db": "db",
"coll": ["a", "b", "c"],
"initialSync": {
"enable": true
},
"config": {
"fullDocument": "required"
}
}
},
{
"$match": {
"operationType": {
"$in": ["insert", "update", "delete", "replace"]
}
}
},
{
"$replaceRoot": {
"newRoot": {
"$cond": {
"if": {
"$eq": [{ "$meta": "stream.source.operationType" }, "delete"]
},
"then": "$documentKey",
"else": "$fullDocument"
}
}
}
},
{
"$iceberg": {
"connectionName": "myS3Connection",
"databaseName": "iceberg-db",
"bucket": "myData",
"path": "iceberg-warehouse/",
"tableName": { "$meta": "stream.source.ns.coll" },
"mode": "cdc"
}
}