Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$iceberg Estágio de agregação

O estágio $iceberg especifica uma conexão no Registro de Conexão a um bucket Amazon Web Services S3 onde você pode gravar dados em uma tabela Apache Iceberg.

$iceberg deve ser o último estágio de qualquer pipeline em que apareça. Você pode usar apenas um estágio $iceberg por pipeline.

O estágio de pipeline do $iceberg tem a seguinte forma de protótipo:

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

O estágio $iceberg recebe um documento com os seguintes campos:

Campo
Tipo
necessidade
Descrição

connectionName

string

Obrigatório

Nome da conexão do Amazon Web Services S3 a ser usada para leitura e gravação. Isso deve corresponder ao nome da conexão no Registro de Conexões.

bucket

string

Obrigatório

Nome do bucket S3 que contém o banco de dados Apache Iceberg de destino.

databaseName

string

Obrigatório

Nome do banco de dados Apache Iceberg que contém a tabela de destino.

tableName

corda | expressão

Obrigatório

Nome da tabela de destino Apache Iceberg. Deve ser uma string ou uma expressão que avalie para uma string. Use expressões para roteamento dinâmico por documento.

path

string

Obrigatório

Chave de prefixo do caminho para seu banco de dados Apache Iceberg.

region

string

Condicional

Região do AWS do bucket. Necessário para processadores de fluxo não executados no AWS.

mode

string

Opcional

Estratégia para determinar qual operação executar por documento de entrada.

  • "cdc" faz com que o Atlas Stream Processing determine o tipo de operação lendo o campo de metadados stream.source.operationType.

  • "insert" faz com que o Atlas Stream Processing anexe cada documento à tabela de destino como uma nova linha, ignorando as declarações de tipo de operação no campo de metadados stream.source.operationType.

Padrão é cdc.

idFieldName

string

Opcional

Nome do campo e da coluna usado como chave de linha no modo cdc.

Padrão é "_id".

partitionedBy

documento

Opcional

Especificação de particionamento. Se você não definir esse campo, $iceberg definirá uma transformação de partição padrão para a coluna idFieldName.

Deve ser um documento contendo um ou mais pares de chave-valor. Cada chave deve ser o nome de uma coluna em relação à qual executar uma transformação de partição, e cada valor deve ser a transformação de partição a ser usada. A primeira transformação de partição deve ser contra idFieldName.

O valor de transformação de partição de um determinado campo deve ser um dos seguintes:

  • "identity"

  • "year"

  • "month"

  • "day"

  • "hour"

  • { truncate: int }

  • { bucket: int }

Para obter mais informações sobre as transformações de partição do Apache Iceberg, consulte a documentação do Apache Iceberg.

catalog

documento

Opcional

Documento que define o catálogo Iceberg a ser usado. Deve ser um documento que contenha o campo type com um valor de "hadoop" ou "glue".

Se você usar o estágio $iceberg, ele deverá ser o último estágio do seu processador de fluxo.

O Atlas Stream Processing suporta o estágio $iceberg apenas para processadores de stream SP10, SP30 e SP50. Seu tier de processador determina o número máximo de tabelas suportadas para roteamento dinâmico:

Nível
Tabelas máximas

SP10

5

SP30

10

SP50

50

O estágio $iceberg infere o esquema da tabela Apache Iceberg resultante do esquema dos dados de saída do processador de stream. À medida que o Atlas Stream Processing observa novos campos no stream, o esquema da tabela evolui de acordo.

Se você especificar uma tabela que ainda não existe, o Apache Iceberg criará a tabela quando receber a primeira mensagem destinada a ela.

O Atlas Stream Processing garante o processamento de pelo menos uma vez para saída para tabelas Apache Iceberg.

Você pode usar uma expressão dinâmica como o valor do campo tableName. Ao usar uma expressão dinâmica para capturar valores específicos do documento, você pode rotear documentos de entrada para diferentes tabelas de acordo com esses valores. A expressão deve ser avaliada como uma string. Para obter um exemplo, consulte Roteamento dinâmico. Para saber mais, consulte operadores de expressão.

Se você especificar um tópico com uma expressão dinâmica, mas o Atlas Stream Processing não puder avaliar a expressão de uma determinada mensagem, ele enviará essa mensagem para a fila de mensagens não entregues (DLQ), se ela estiver configurada, e processará as mensagens subsequentes. Se não houver uma fila de mensagens não entregues (DLQ) configurada, o Atlas Stream Processing ignorará completamente a mensagem e processará as mensagens subsequentes.

O Atlas Stream Processing executa a conversão de tipo de BSON para tipos primitivos Iceberg ao gravar em tabelas no estágio $iceberg.

BSON
Apache Iceberg Primitivo
Detalhes

string

string

int

int

long

long

double

double

bool

boolean

ObjectId

string

Codificado em hexadecimal

UUID

string

UUID stringificado

BinData

binary

Não se aplica ao UUID

date

timestamptz

Horário UTC, medido em microssegundos

timestamp

timestamptz

Horário UTC, medida em microssegundos

object

string

Serializado como uma string JSON básica

array

string

Serializado como uma string JSON básica

Outros BSON types não são suportados. O Atlas Stream Processing envia documentos com BSON types não suportados para o DLQ.

Os exemplos a seguir ilustram vários aplicativos do estágio $iceberg.

O exemplo a seguir demonstra como gravar o conteúdo inicial e o changestream de um banco de dados Atlas em uma tabela Apache Iceberg de forma somente anexa, criando um arquivo durável do histórico operacional desse banco de dados. Esta agregação tem duas etapas:

  1. O estágio $source estabelece uma conexão com o banco de dados Atlas, visando especificamente a coleção orders no banco de dados db. Ele permite que a sincronização inicial capture documentos no banco de dados no momento da ativação do processador e garante que o documento completo seja capturado por cada evento de changestream.

  2. O estágio $iceberg estabelece uma conexão com o bucket AWS S3, gravando em uma tabela chamada myTable no caminho iceberg-warehouse/. Ao especificar apenas insert operações, ele garante um fluxo de gravação somente de acréscimo, estilo log.

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

O exemplo a seguir demonstra como espelhar uma coleção do Atlas em sua totalidade para uma tabela Apache Iceberg.

Antes de definir a agregação, defina a seguinte variável:

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

A agregação a seguir adiciona, atualizar e excluir entradas de tabela Apache Iceberg em sincronização com as alterações na coleção de origem do Atlas. Tem quatro etapas:

  1. O estágio $source estabelece uma conexão com o banco de dados Atlas, visando especificamente a coleção orders no banco de dados db. Ele permite que a sincronização inicial capture documentos no banco de dados no momento da ativação do processador e garante que o documento completo seja capturado por cada evento de changestream.

  2. A etapa $match filtra operationType para que apenas documentos com declarações de tipo de operação válidas sejam processados.

  3. A fase $replaceRoot altera a raiz do documento dependendo do tipo de operação.

    • Para operações de exclusão, ele altera a raiz do documento para a chave do documento. Isso resulta em um registro de que o documento foi excluído, mas exclui seu conteúdo em processamento posterior.

    • Para todas as outras operações, ele altera a raiz do documento para o fullDocument, passando o conteúdo do documento para em processamento adicional, excluindo metadados de fluxo de alteração.

  4. O estágio $iceberg estabelece uma conexão com o bucket AWS S3, gravando em uma tabela Apache Iceberg chamada myTable no caminho iceberg-warehouse/. No modo cdc, este estágio determina a operação a ser executada na tabela Apache Iceberg lendo o campo de metadados stream.source.operationType 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"
}
}

No exemplo a seguir, o Atlas Stream Processing usa expressões dinâmicas para rotear dinamicamente documentos para vários destinos de saída.

  1. O estágio $source estabelece uma conexão com o banco de dados Atlas, visando especificamente as coleções a, b e c no banco de dados db. Ele permite que a sincronização inicial capture documentos no banco de dados no momento da ativação do processador e garante que o documento completo seja capturado por cada evento de changestream.

  2. O estágio $match filtra documentos cujo operationType é um de "insert", "update", "delete" ou "replace".

  3. A fase $replaceRoot altera a raiz do documento dependendo do tipo de operação.

    • Para operações de exclusão, ele altera a raiz do documento para a chave do documento. Isso resulta em um registro de que o documento foi excluído, mas exclui seu conteúdo em processamento posterior.

    • Para todas as outras operações, ele altera a raiz do documento para o fullDocument, passando o conteúdo do documento para em processamento adicional, excluindo metadados de fluxo de alteração.

  4. O estágio $iceberg estabelece uma conexão com o bucket AWS S3 chamado myData, gravando em uma tabela Apache Iceberg no caminho iceberg-warehouse/. Ele determina o nome da tabela de acordo com o nome da origem collection conforme recuperado dos metadados do documento. Ele também determina a operação a ser executada de acordo com os metadados do 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"
}
}