$out toma los documentos devueltos por el pipeline de agregación y los guarda en una colección especificada. El operador $out debe ser la última etapa del pipeline de agregación. En Atlas Data Federation, puedes usar $out para guardar datos desde cualquiera de los almacenamientos de instancias federadas de base de datos admitidas o desde varios almacenamientos de instancias federadas de base de datos admitidas al usar queries federados en cualquiera de los siguientes:
Clúster de Atlas namespace
AWS S3 cubos con permisos de lectura y guardar
Contenedores de almacenamiento de blobs de Azure con permisos de lectura y escritura
Google Cloud Storage (GCS)
Debes conectar a tu instancia federada de base de datos para usar $out.
Permisos requeridos
Debe tener:
Una instancia federada de base de datos configurada para un bucket S3 con permisos de lectura y para guardar o permisos de s3:PutObject.
Un usuario de MongoDB con el rol atlasAdmin o un rol personalizado con el privilegio
outToS3.
Debe tener:
Una instancia federada de base de datos configurada para Azure Blob Storage con un Rol de Azure que tiene permisos de lectura y escritura.
Un usuario de MongoDB con el rol atlasAdmin o un rol personalizado con el privilegio
outToAzure.
Debe tener:
Una instancia federada de base de datos configurada para un bucket de Google Cloud Storage con acceso a una cuenta de servicio de GCP.
Un usuario de MongoDB con el rol atlasAdmin o un rol personalizado con el privilegio
outToGCP.
Nota
Para usar $out para guardar en una colección en una base de datos diferente en el mismo clúster de Atlas, su clúster de Atlas debe estar en la versión 7.0 de MongoDB o posterior.
Debe ser un usuario de base de datos con uno de los siguientes roles:
Sintaxis
{ "$out": { "s3": { "bucket": "<bucket-name>", "region": "<aws-region>", "filename": "<file-name>", "format": { "name": "<file-format>", "maxFileSize": "<file-size>", "maxRowGroupSize": "<row-group-size>", "columnCompression": "<compression-type>" }, "errorMode": "stop"|"continue" } } }
{ "$out": { "azure": { "serviceURL": "<storage-account-url>", "containerName": "<container-name>", "region": "<azure-region>", "filename": "<file-name>", "format": { "name": "<file-format>", "maxFileSize": "<file-size>", "maxRowGroupSize": "<row-group-size>", "columnCompression": "<compression-type>" }, "errorMode": "stop"|"continue" } } }
{ "$out": { "gcs": { "bucket": "<bucket-name>", "region": "<aws-region>", "filename": "<file-name>", "format": { "name": "<file-format>", "maxFileSize": "<file-size>", "maxRowGroupSize": "<row-group-size>", "columnCompression": "<compression-type>" }, "errorMode": "stop"|"continue" } } }
{ "$out": { "atlas": { "projectId": "<atlas-project-ID>", "clusterName": "<atlas-cluster-name>", "db": "<atlas-database-name>", "coll": "<atlas-collection-name>" } } }
Campos
Campo | Tipo | Descripción | Necesidad | |
|---|---|---|---|---|
| Objeto | Ubicación para guardar los documentos desde el pipeline de agregación. | Requerido | |
| string | Nombre del bucket de S3 en el que se guardarán los documentos del pipeline de agregación. La llamar generada a S3 inserta un Por ejemplo, si estableces | Requerido | |
| string | Nombre de la región AWS en la que se aloja el bucket. Si se omite, utiliza la configuración de la instancia federada de base de datos para determinar la región donde se aloja el | Opcional | |
| string | Nombre del archivo donde se escribirán los documentos del proceso de agregación. El nombre del archivo puede ser constante o generarse dinámicamente a partir de los campos de los documentos que llegan a la etapa La llamar generada a S3 inserta un Por ejemplo, si estableces | Requerido | |
| Objeto | Detalles del archivo en S3. | Requerido | |
| enum | Formato del archivo en S3. El valor puede ser uno de los siguientes:
1 Para este formato, Para aprender más, se puede consultar Limitaciones. | Requerido | |
| bytes | Tamaño máximo del archivo BSON sin comprimir en S3. Al convertir de BSON al formato preferido, el archivo de salida resultante puede ser más pequeño (por ejemplo, al convertir a Parquet) o más grande (por ejemplo, al convertir a CSV). Si un documento es mayor que el
Si se omite, es por defecto Cuando se alcanza el límite de tamaño de archivo para el archivo actual, Atlas Data Federation crea un nuevo archivo en S3. Adjunta un Por ejemplo, | Opcional | |
| string | Solo compatible con el formato de archivo Parquet. Tamaño máximo del grupo de filas a utilizar al escribir en un archivo Parquet. Si se omite, el valor por defecto es | Opcional | |
| string | Solo compatible con el formato de archivo Parquet. Tipo de compresión a aplicar para comprimir los datos dentro de un archivo Parquet al formatear el archivo Parquet. Valores válidos:
Si se omite, es por defecto Para obtener más información, consulte Formatos de datos admitidos. | Opcional | |
| enum | Especifica cómo debe proceder Atlas Data Federation si hay errores durante el procesamiento de un documento. Por ejemplo, si Atlas Data Federation encuentra un arreglo en un documento cuando Atlas Data Federation escribe en un archivo CSV, Atlas Data Federation usa este valor para determinar si debe o no omitir el documento y procesar otros documentos. Los valores válidos son:
Si se omite, es por defecto | Opcional |
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| Objeto | Ubicación para guardar los documentos desde el pipeline de agregación. | Requerido |
| string | URL de la cuenta de almacenamiento de Azure en la que se escribirán documentos desde la canalización de agregación. | Requerido |
| string | Nombre del contenedor de Azure Blob Storage en el que se guardarán los documentos del pipeline de agregación. | Requerido |
| string | Nombre de la región Azure que aloja el contenedor de Blob Storage. | Requerido |
| string | Nombre del archivo en el que guardar documentos a partir de la pipeline de agregación. Acepta valores constantes, o valores que se evalúan como | Requerido |
| Objeto | Detalles del archivo en Azure Blob Storage. | Requerido |
| enum | Formato del archivo en Azure Blob Storage. El valor puede ser uno de los siguientes:
1 Para este formato, Para aprender más, se puede consultar Limitaciones. | Requerido |
| bytes | Tamaño máximo del documento BSON sin comprimir en Azure Blob Storage. Al convertir de BSON al formato preferido, el archivo de salida resultante puede ser más pequeño (por ejemplo, al convertir a Parquet) o más grande (por ejemplo, al convertir a CSV). Si un documento es mayor que el
Si se omite, es por defecto Cuando se alcanza el límite de tamaño de archivo para el archivo actual, Atlas Data Federation crea un nuevo archivo en S3. Adjunta un Por ejemplo, | Opcional |
| string | Solo compatible con el formato de archivo Parquet. Tamaño máximo del grupo de filas a utilizar al escribir en un archivo Parquet. Si se omite, el valor por defecto es | Opcional |
| string | Solo compatible con el formato de archivo Parquet. Tipo de compresión a aplicar para comprimir los datos dentro de un archivo Parquet al formatear el archivo Parquet. Valores válidos:
Si se omite, es por defecto Para obtener más información, consulte Formatos de datos admitidos. | Opcional |
| enum | Especifica cómo debe proceder Atlas Data Federation si hay errores durante el procesamiento de un documento. Por ejemplo, si Atlas Data Federation encuentra un arreglo en un documento cuando Atlas Data Federation escribe en un archivo CSV, Atlas Data Federation usa este valor para determinar si debe o no omitir el documento y procesar otros documentos. Los valores válidos son:
Si se omite, es por defecto | Opcional |
Campo | Tipo | Descripción | Necesidad | |
|---|---|---|---|---|
| Objeto | Ubicación para guardar los documentos desde el pipeline de agregación. | Requerido | |
| string | Nombre del bucket de Google Cloud Storage en el que se guardarán los documentos provenientes del pipeline de agregación. La llamada generada a Google Cloud inserta un Por ejemplo, si estableces | Requerido | |
| string | Nombre de la región de Google Cloud Platform en la que se aloja el bucket. Si se omite, utiliza la configuración de la instancia federada de base de datos para determinar la región donde se aloja el | Opcional | |
| string | Nombre del archivo en el que se guardarán los documentos del pipeline de agregación. El nombre de archivo puede ser constante o creado dinámicamente a partir de los campos de los documentos que llegan a la etapa La llamada generada a Google Cloud Storage inserta un Por ejemplo, si estableces | Requerido | |
| Objeto | Detalles del archivo en Google Cloud almacenamiento. | Requerido | |
| enum | Formato del archivo en Google Cloud Storage. El valor puede ser uno de los siguientes:
1 Para este formato, Para aprender más, se puede consultar Limitaciones. | Requerido |
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| Objeto | Ubicación para guardar los documentos desde el pipeline de agregación. | Requerido |
| string | Nombre del clúster de Atlas | Requerido |
| string | Nombre de la colección en el clúster Atlas. | Requerido |
| string | Nombre de la base de datos en el clúster Atlas que contiene la colección. | Requerido |
| string | Identificador único del proyecto que contiene el clúster de Atlas. El ID del grupo debe ser el ID del Proyecto que contenga tu instancia de base de datos federada. Si se omite, se utilizará por defecto el ID del Proyecto que contiene la instancia federada de base de datos. | Opcional |
opciones
Opción | Tipo | Descripción | Necesidad | |
|---|---|---|---|---|
| booleano | Bandera para ejecutar operaciones de agregación en segundo plano. Si se omite, el valor por defecto es Utiliza esta opción si deseas enviar otras consultas nuevas sin esperar a que se completen las consultas en curso o desconectar la conexión de tu instancia federada de base de datos mientras las consultas continúan ejecutándose en segundo plano. | Opcional |
Ejemplos
Crear un nombre de archivo
Los siguientes ejemplos muestran $out sintaxis para crear dinámicamente un nombre de archivo a partir de un string constante o de los campos de tipos de datos iguales o diferentes en los documentos que llegan a la $out etapa.
Ejemplo de string simple
Se quieren guardar 1 GiB de datos como archivos comprimidos BSON en un bucket S3 llamado my-s3-bucket.
Usando la siguiente sintaxis de $out:
{ "$out": { "s3": { "bucket": "my-s3-bucket", "filename": "big_box_store/", "format": { "name": "bson.gz" } } } }
Se omite el s3.region y, por lo tanto, Atlas Data Federation determina la región donde se aloja el bucket llamado my-s3-bucket a partir de la configuración de almacenamiento. $out guarda cinco archivos BSON comprimidos:
Los primeros 200 MiB de datos a un archivo que
$outnombrabig_box_store/1.bson.gz.El valor de
s3.filenamesirve como una constante en cada nombre de archivo. Este valor no depende de ningún campo o valor de documento.Tu
s3.filenametermina con un delimitador, por lo que Atlas Data Federation añade el contador después de la constante.Si no terminaba con un delimitador, Atlas Data Federation habría agregado un
.entre la constante y el contador, comobig_box_store.1.bson.gzComo no se cambió el tamaño máximo de archivo con
s3.format.maxFileSize, Atlas Data Federation utiliza el valor por defecto de 200 MiB.
Los segundos 200 MiB de datos a un nuevo archivo que
$outnombrabig_box_store/2.bson.gz.Tres archivos más que
$outse denominanbig_box_store/3.bson.gzabig_box_store/5.bson.gz.
Campo único de documentos
Se quieren guardar 90 MiB de datos en archivos JSON en un bucket S3 llamado my-s3-bucket.
Usando la siguiente sintaxis de $out:
{ "$out": { "s3": { "bucket": "my-s3-bucket", "region": "us-east-1", "filename": {"$toString": "$saleDate"}, "format": { "name": "json", "maxFileSize": "100MiB" } } } }
$out escribe 90 MiB de datos en archivos JSON en la raíz del bucket. Cada archivo JSON contiene todos los documentos con el mismo valor saleDate. $out nombra cada archivo usando el valor saleDate de los documentos convertido a una cadena.
Varios campos de documentos
Se quieren guardar 176 MiB de datos en archivos BSON en un bucket S3 llamado my-s3-bucket.
Usando la siguiente sintaxis de $out:
{ "$out": { "s3": { "bucket": "my-s3-bucket", "region": "us-east-1", "filename": { "$concat": [ "persons/", "$name", "/", "$uniqueId", "/" ] }, "format": { "name": "bson", "maxFileSize": "200MiB" } } } }
$out escribe 176 MiB de datos en archivos BSON.Para nombrar cada archivo, $out concatena:
Una string constante
persons/y, de los documentos:El valor string del campo
name,Una barra diagonal (
/),El valor de la string del campo
uniqueId, yUna barra diagonal (
/).
Cada archivo BSON contiene todos los documentos con los mismos valores name y uniqueId. $out nombra cada archivo utilizando los valores name y uniqueId del documento.
Varios tipos de campos de documentos
Se quieren guardar 154 MiB de datos como archivos JSON comprimidos en un bucket S3 llamado my-s3-bucket.
Considere la siguiente $out sintaxis:
{ "$out": { "s3": { "bucket": "my-s3-bucket", "region": "us-east-1", "filename": { "$concat": [ "big-box-store/", { "$toString": "$storeNumber" }, "/", { "$toString": "$saleDate" }, "/", "$partId", "/" ] }, "format": { "name": "json.gz", "maxFileSize": "200MiB" } } } }
$out escribe 154 MiB de datos en archivos JSON comprimidos, donde cada archivo contiene todos los documentos con los mismos valores storeNumber, saleDate y partId. Para nombrar cada archivo, $out concatena:
Un valor de cadena constante de
big-box-store/,Un valor string que representa la identificación única de una tienda perteneciente al campo
storeNumber.Una barra diagonal (
/),Un valor de string de la fecha del campo
saleDate,Una barra diagonal (
/),Un valor de string del identificador de parte del campo
partId, yUna barra diagonal (
/).
Crear un nombre de archivo
Los siguientes ejemplos muestran $out sintaxis para crear dinámicamente un nombre de archivo a partir de un string constante o de los campos de tipos de datos iguales o diferentes en los documentos que llegan a la $out etapa.
Ejemplo de string simple
Se quieren guardar 1 GiB de datos como archivos BSON comprimidos en una cuenta de almacenamiento de Azure mystorageaccount y un contenedor llamado my-container.
Usando la siguiente sintaxis de $out:
{ "$out": { "azure": { "serviceURL": "http://mystorageaccount.blob.core.windows.net/", "containerName": "my-container", "filename": "big_box_store/", "format": { "name": "bson.gz" } } } }
Se omite el azure.region, por lo que Atlas Data Federation determina la región donde se aloja el contenedor llamado my-container a partir de la configuración del almacenamiento. $out guarda cinco archivos BSON comprimidos:
Los primeros 200 MiB de datos a un archivo que
$outnombrabig_box_store/1.bson.gz.El valor de
azure.filenamesirve como una constante en cada nombre de archivo. Este valor no depende de ningún campo o valor de documento.Tu
azure.filenametermina con un delimitador, por lo que Atlas Data Federation añade el contador después de la constante.Si no terminaba con un delimitador, Atlas Data Federation habría agregado un
.entre la constante y el contador, comobig_box_store.1.bson.gzComo no se cambió el tamaño máximo de archivo con
azure.format.maxFileSize, Atlas Data Federation utiliza el valor por defecto de 200 MiB.
Los segundos 200 MiB de datos a un nuevo archivo que
$outnombrabig_box_store/2.bson.gz.Tres archivos más que
$outse denominanbig_box_store/3.bson.gzabig_box_store/5.bson.gz.
Campo único de documentos
Se quieren guardar 90 MiB de datos en archivos JSON en un contenedor de Azure Blob almacenamiento llamado my-container.
Usando la siguiente sintaxis de $out:
{ "$out": { "azure": { "serviceURL": "http://mystorageaccount.blob.core.windows.net/", "containerName": "my-container", "region": "eastus2", "filename": {"$toString": "$saleDate"}, "format": { "name": "json", "maxFileSize": "100MiB" } } } }
$out escribe 90 MiB de datos en archivos JSON en la raíz del contenedor. Cada archivo JSON contiene todos los documentos con el mismo valor saleDate. $out nombra cada archivo usando el valor saleDate de los documentos convertido a una cadena.
Varios campos de documentos
Se quieren guardar 176 MiB de datos en archivos BSON en un contenedor de Azure Blob Storage llamado my-container.
Usando la siguiente sintaxis de $out:
{ "$out": { "azure": { "serviceURL": "http://mystorageaccount.blob.core.windows.net/", "containerName": "my-container", "region": "eastus2", "filename": { "$concat": [ "persons/", "$name", "/", "$uniqueId", "/" ] }, "format": { "name": "bson", "maxFileSize": "200MiB" } } } }
$out escribe 176 MiB de datos en archivos BSON.Para nombrar cada archivo, $out concatena:
Una string constante
persons/y, de los documentos:El valor string del campo
name,Una barra diagonal (
/),El valor de la string del campo
uniqueId, yUna barra diagonal (
/).
Cada archivo BSON contiene todos los documentos con los mismos valores name y uniqueId. $out nombra cada archivo utilizando los valores name y uniqueId del documento.
Varios tipos de campos de documentos
Se quieren guardar 154 MiB de datos como archivos JSON comprimidos en un contenedor de Azure Blob almacenamiento my-container llamado.
Considere la siguiente $out sintaxis:
{ "$out": { "azure": { "serviceURL": "http://mystorageaccount.blob.core.windows.net/", "containerName": "my-container", "region": "eastus2", "filename": { "$concat": [ "big-box-store/", { "$toString": "$storeNumber" }, "/", { "$toString": "$saleDate" }, "/", "$partId", "/" ] }, "format": { "name": "json.gz", "maxFileSize": "200MiB" } } } }
$out escribe 154 MiB de datos en archivos JSON comprimidos, donde cada archivo contiene todos los documentos con los mismos valores storeNumber, saleDate y partId. Para nombrar cada archivo, $out concatena:
Un valor de cadena constante de
big-box-store/,Un valor string que representa la identificación única de una tienda perteneciente al campo
storeNumber.Una barra diagonal (
/),Un valor de string de la fecha del campo
saleDate,Una barra diagonal (
/),Un valor de string del identificador de parte del campo
partId, yUna barra diagonal (
/).
Crear un nombre de archivo
Los siguientes ejemplos muestran $out sintaxis para crear dinámicamente un nombre de archivo a partir de un string constante o de los campos de tipos de datos iguales o diferentes en los documentos que llegan a la $out etapa.
Ejemplo de string simple
Se quieren guardar 1 GiB de datos como archivos BSON comprimidos en un bucket de Google Cloud Storage llamado my-gcs-bucket.
Usando la siguiente sintaxis de $out:
{ "$out": { "gcs": { "bucket": "my-gcs-bucket", "filename": "big_box_store/", "format": { "name": "bson.gz" } } } }
Se omite el gcs.region y, por lo tanto, Atlas Data Federation determina la región donde se aloja el bucket llamado my-gcs-bucket a partir de la configuración de almacenamiento. $out guarda cinco archivos BSON comprimidos:
Los primeros 200 MiB de datos a un archivo que
$outnombrabig_box_store/1.bson.gz.El valor de
gcs.filenamesirve como una constante en cada nombre de archivo. Este valor no depende de ningún campo o valor de documento.Tu
gcs.filenametermina con un delimitador, por lo que Atlas Data Federation añade el contador después de la constante.Si no terminaba con un delimitador, Atlas Data Federation habría agregado un
.entre la constante y el contador, comobig_box_store.1.bson.gzComo no se cambió el tamaño máximo de archivo con
gcs.format.maxFileSize, Atlas Data Federation utiliza el valor por defecto de 200 MiB.
Los segundos 200 MiB de datos a un nuevo archivo que
$outnombrabig_box_store/2.bson.gz.Tres archivos más que
$outse denominanbig_box_store/3.bson.gzabig_box_store/5.bson.gz.
Campo único de documentos
Se quieren guardar 90 MiB de datos en archivos JSON en un bucket de Google Cloud Storage llamado my-gcs-bucket.
Usando la siguiente sintaxis de $out:
{ "$out": { "gcs": { "bucket": "my-gcs-bucket", "region": "us-central1", "filename": {"$toString": "$saleDate"}, "format": { "name": "json", "maxFileSize": "100MiB" } } } }
$out escribe 90 MiB de datos en archivos JSON en la raíz del bucket. Cada archivo JSON contiene todos los documentos con el mismo valor saleDate. $out nombra cada archivo usando el valor saleDate de los documentos convertido a una cadena.
Varios campos de documentos
Se quieren guardar 176 MiB de datos en archivos BSON en un bucket de Google Cloud Storage llamado my-gcs-bucket.
Usando la siguiente sintaxis de $out:
{ "$out": { "gcs": { "bucket": "my-gcs-bucket", "region": "us-central1", "filename": { "$concat": [ "persons/", "$name", "/", "$uniqueId", "/" ] }, "format": { "name": "bson", "maxFileSize": "200MiB" } } } }
$out escribe 176 MiB de datos en archivos BSON.Para nombrar cada archivo, $out concatena:
Una string constante
persons/y, de los documentos:El valor string del campo
name,Una barra diagonal (
/),El valor de la string del campo
uniqueId, yUna barra diagonal (
/).
Cada archivo BSON contiene todos los documentos con los mismos valores name y uniqueId. $out nombra cada archivo utilizando los valores name y uniqueId del documento.
Varios tipos de campos de documentos
Se quieren guardar 154 MiB de datos como archivos JSON comprimidos en un bucket de Google Cloud almacenamiento llamado my-gcs-bucket.
Considere la siguiente $out sintaxis:
{ "$out": { "gcs": { "bucket": "my-gcs-bucket", "region": "us-central1", "filename": { "$concat": [ "big-box-store/", { "$toString": "$storeNumber" }, "/", { "$toString": "$saleDate" }, "/", "$partId", "/" ] }, "format": { "name": "json.gz", "maxFileSize": "200MiB" } } } }
$out escribe 154 MiB de datos en archivos JSON comprimidos, donde cada archivo contiene todos los documentos con los mismos valores storeNumber, saleDate y partId. Para nombrar cada archivo, $out concatena:
Un valor de cadena constante de
big-box-store/,Un valor string que representa la identificación única de una tienda perteneciente al campo
storeNumber.Una barra diagonal (
/),Un valor de string de la fecha del campo
saleDate,Una barra diagonal (
/),Un valor de string del identificador de parte del campo
partId, yUna barra diagonal (
/).
Guardar en la colección en Atlas Clúster
Esta $out sintaxis envía los datos agregados a una colección sampleDB.mySampleData en el clúster de Atlas denominado myTestCluster. La sintaxis no especifica un ID del proyecto; $out utiliza el ID del proyecto que contiene su instancia federada de base de datos.
{ "$out": { "atlas": { "clusterName": "myTestCluster", "db": "sampleDB", "coll": "mySampleData" } } }
Ejecutar una query en segundo plano
El siguiente ejemplo muestra la sintaxis de $out para ejecutar un pipeline de agregación que termina con la etapa $out en segundo plano.
db.runCommand({ "aggregate": "my-collection", "pipeline": [ { "$out": { "s3": { "bucket": "my-s3-bucket", "filename": { "$toString": "$saleDate" }, "format": { "name": "json" } } } } ], "background": true })
$out escribe en archivos JSON en la raíz del bucket en segundo plano. Cada archivo JSON contiene todos los documentos con el mismo valor saleDate. $out nombra cada archivo usando el valor saleDate de los documentos convertido a un string.
db.runCommand({ "aggregate": "my-collection", "pipeline": [ { "$out": { "azure": { "serviceURL": "http://mystorageaccount.blob.core.windows.net/", "containerName": "my-container", "filename": { "$toString": "$saleDate" }, "format": { "name": "json" } } } } ], "background": true })
$out escribe en archivos JSON en la raíz del contenedor de almacenamiento de Azure Blob en segundo plano. Cada archivo JSON contiene todos los documentos con el mismo valor saleDate. $out nombra cada archivo usando el valor saleDate de los documentos convertido a un string.
db.runCommand({ "aggregate": "my-collection", "pipeline": [ { "$out": { "gcs": { "bucket": "my-gcs-bucket", "filename": { "$toString": "$saleDate" }, "format": { "name": "json" } } } } ], "background": true })
$out escribe en archivos JSON en la raíz del bucket en segundo plano. Cada archivo JSON contiene todos los documentos con el mismo valor saleDate. $out nombra cada archivo usando el valor saleDate de los documentos convertido a un string.
db.runCommand({ "aggregate": "my-collection", "pipeline": [ { "$out": { "atlas": { "clusterName": "myTestCluster", "db": "sampleDB", "coll": "mySampleData" } } } ], "background": true })
$out guardar en la colección sampleDB.mySampleData en el clúster de Atlas denominado myTestCluster en segundo plano.
Limitaciones
String Tipo de dato
Atlas Data Federation interpreta las cadenas vacías ("") como valores null al analizar los nombres de archivo. Si desea que Atlas Data Federation genere nombres de archivo analizables, encapsule las referencias de campo que podrían tener valores null utilizando $convert con un valor de string vacía onNull.
Este ejemplo muestra cómo gestionar valores nulos en el campo year al crear un nombre de archivo a partir del valor del campo.
{ "$out": { "s3": { "bucket": "my-s3-bucket", "region": "us-east-1", "filename": { "$concat": [ "big-box-store/", { "$convert": { "input": "$year", "to": "string", "onNull": "" } }, "/" ] }, "format": { "name": "json.gz", "maxFileSize": "200MiB" } } } }
Número de campos únicos
Al escribir en formato de archivo CSV, TSV o Parquet, Atlas Data Federation no admite más de 32000 campos únicos.
Formato de archivo CSV y TSV
Al escribir en formato CSV o TSV, Atlas Data Federation no admite los siguientes tipos de datos en los documentos:
Arreglos
DBPointer
JavaScript
Código JavaScript con alcance
Tipo de dato mínimo o máximo de clave
En un archivo CSV, Atlas Data Federation representa los documentos anidados mediante la notación de punto (.). Por ejemplo, Atlas Data Federation guarda { x: { a: 1, b: 2 } } como lo siguiente en el archivo CSV:
x.a,x.b 1,2
Atlas Data Federation representa todos los demás tipos de datos como cadenas de texto. Por lo tanto, los tipos de datos en MongoDB leídos desde el archivo CSV pueden no ser los mismos que los tipos de datos en los documentos BSON originales desde los cuales se escribieron los tipos de datos.
Formato de archivo Parquet
Para Parquet, Atlas Data Federation lee los campos que tienen valores nulos o no definidos como faltantes, porque Parquet no distingue entre valores nulos o no definidos y valores faltantes. Aunque Atlas Data Federation admite todos los tipos de datos, para los tipos de datos BSON que no tienen un equivalente directo en Parquet, como JavaScript, expresiones regulares, etc.:
Elige una representación que permita que el archivo Parquet resultante pueda leerse con una herramienta ajena a MongoDB.
Almacena un esquema de MongoDB en los metadatos de clave/valor del archivo Parquet para que Atlas Data Federation pueda reconstruir el documento BSON original BSON original con los tipos de datos correctos si Atlas Data Federation vuelve a leer el archivo Parquet.
Considerar los siguientes documentos BSON:
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers": ["345-6789"], "clientInfo": { "name": "Jordan" } }
Si escribe los documentos BSON anteriores en formato Parquet usando $out a S3, el esquema del archivo Parquet para sus documentos BSON se vería similar al siguiente:
message root { optional group clientId { optional int32 int; optional binary string (STRING); } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
Sus datos Parquet en S3 tendrían un aspecto similar al siguiente:
clientId: .int = 102 phoneNumbers: .list: ..element = "123-4567" .list: ..element = "234-5678" clientInfo: .name = "Taylor" .occupation = "teacher" clientId: .string = "237" phoneNumbers: .list: ..element = "345-6789" clientInfo: .name = "Jordan"
El ejemplo anterior demuestra cómo Atlas Data Federation gestiona los tipos de datos complejos:
Atlas Data Federation mapea documentos en todos los niveles a un grupo Parquet.
Atlas Data Federation codifica arreglos usando el tipo lógico
LISTy la estructura obligatoria de lista o elemento de tres niveles. Para obtener más información, consulta Listas.Atlas Data Federation asigna campos BSON polimórficos a un grupo de múltiples columnas de tipo único porque Parquet no admite columnas polimórficas. Atlas Data Federation nombra al grupo según el campo BSON. En el ejemplo anterior, Atlas Data Federation crea un grupo Parquet denominado
clientIdpara el campo polimórfico denominadoclientIdcon dos elementos secundarios denominados según sus tipos BSON,intystring.
String Tipo de dato
Atlas Data Federation interpreta las cadenas vacías ("") como valores null al analizar los nombres de archivo. Si desea que Atlas Data Federation genere nombres de archivo analizables, encapsule las referencias de campo que podrían tener valores null utilizando $convert con un valor de string vacía onNull.
Este ejemplo muestra cómo gestionar valores nulos en el campo year al crear un nombre de archivo a partir del valor del campo.
{ "$out": { "azure": { "serviceURL": "http://mystorageaccount.blob.core.windows.net/", "containerName": "my-container", "region": "eastus2", "filename": { "$concat": [ "big-box-store/", { "$convert": { "input": "$year", "to": "string", "onNull": "" } }, "/" ] }, "format": { "name": "json.gz", "maxFileSize": "200MiB" } } } }
Número de campos únicos
Al escribir en formato de archivo CSV, TSV o Parquet, Atlas Data Federation no admite más de 32000 campos únicos.
Formato de archivo CSV y TSV
Al escribir en formato CSV o TSV, Atlas Data Federation no admite los siguientes tipos de datos en los documentos:
Arreglos
DBPointer
JavaScript
Código JavaScript con alcance
Tipo de dato mínimo o máximo de clave
En un archivo CSV, Atlas Data Federation representa los documentos anidados mediante la notación de punto (.). Por ejemplo, Atlas Data Federation guarda { x: { a: 1, b: 2 } } como lo siguiente en el archivo CSV:
x.a,x.b 1,2
Atlas Data Federation representa todos los demás tipos de datos como cadenas de texto. Por lo tanto, los tipos de datos en MongoDB leídos desde el archivo CSV pueden no ser los mismos que los tipos de datos en los documentos BSON originales desde los cuales se escribieron los tipos de datos.
Formato de archivo Parquet
Para Parquet, Atlas Data Federation lee los campos que tienen valores nulos o no definidos como faltantes, porque Parquet no distingue entre valores nulos o no definidos y valores faltantes. Aunque Atlas Data Federation admite todos los tipos de datos, para los tipos de datos BSON que no tienen un equivalente directo en Parquet, como JavaScript, expresiones regulares, etc.:
Elige una representación que permita que el archivo Parquet resultante pueda leerse con una herramienta ajena a MongoDB.
Almacena un esquema de MongoDB en los metadatos de clave/valor del archivo Parquet para que Atlas Data Federation pueda reconstruir el documento BSON original BSON original con los tipos de datos correctos si Atlas Data Federation vuelve a leer el archivo Parquet.
Considerar los siguientes documentos BSON:
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers": ["345-6789"], "clientInfo": { "name": "Jordan" } }
Si escribes los documentos BSON anteriores en formato Parquet usando $out to Azure, el esquema de archivos Parquet para tus documentos BSON sería similar al siguiente:
message root { optional group clientId { optional int32 int; optional binary string (STRING); } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
Sus datos Parquet en Azure Blob almacenamiento tendrían un aspecto similar al siguiente:
clientId: .int = 102 phoneNumbers: .list: ..element = "123-4567" .list: ..element = "234-5678" clientInfo: .name = "Taylor" .occupation = "teacher" clientId: .string = "237" phoneNumbers: .list: ..element = "345-6789" clientInfo: .name = "Jordan"
El ejemplo anterior demuestra cómo Atlas Data Federation gestiona los tipos de datos complejos:
Atlas Data Federation mapea documentos en todos los niveles a un grupo Parquet.
Atlas Data Federation codifica arreglos usando el tipo lógico
LISTy la estructura obligatoria de lista o elemento de tres niveles. Para obtener más información, consulta Listas.Atlas Data Federation asigna campos BSON polimórficos a un grupo de múltiples columnas de tipo único porque Parquet no admite columnas polimórficas. Atlas Data Federation nombra al grupo según el campo BSON. En el ejemplo anterior, Atlas Data Federation crea un grupo Parquet denominado
clientIdpara el campo polimórfico denominadoclientIdcon dos elementos secundarios denominados según sus tipos BSON,intystring.
String Tipo de dato
Atlas Data Federation interpreta las cadenas vacías ("") como valores null al analizar los nombres de archivo. Si desea que Atlas Data Federation genere nombres de archivo analizables, encapsule las referencias de campo que podrían tener valores null utilizando $convert con un valor de string vacía onNull.
Este ejemplo muestra cómo gestionar valores nulos en el campo year al crear un nombre de archivo a partir del valor del campo.
{ "$out": { "gcs": { "bucket": "my-gcs-bucket", "region": "us-central1", "filename": { "$concat": [ "big-box-store/", { "$convert": { "input": "$year", "to": "string", "onNull": "" } }, "/" ] }, "format": { "name": "json.gz", "maxFileSize": "200MiB" } } } }
Número de campos únicos
Al escribir en formato de archivo CSV, TSV o Parquet, Atlas Data Federation no admite más de 32000 campos únicos.
Formato de archivo CSV y TSV
Al escribir en formato CSV o TSV, Atlas Data Federation no admite los siguientes tipos de datos en los documentos:
Arreglos
DBPointer
JavaScript
Código JavaScript con alcance
Tipo de dato mínimo o máximo de clave
En un archivo CSV, Atlas Data Federation representa los documentos anidados mediante la notación de punto (.). Por ejemplo, Atlas Data Federation guarda { x: { a: 1, b: 2 } } como lo siguiente en el archivo CSV:
x.a,x.b 1,2
Atlas Data Federation representa todos los demás tipos de datos como cadenas de texto. Por lo tanto, los tipos de datos en MongoDB leídos desde el archivo CSV pueden no ser los mismos que los tipos de datos en los documentos BSON originales desde los cuales se escribieron los tipos de datos.
Formato de archivo Parquet
Para Parquet, Atlas Data Federation lee los campos que tienen valores nulos o no definidos como faltantes, porque Parquet no distingue entre valores nulos o no definidos y valores faltantes. Aunque Atlas Data Federation admite todos los tipos de datos, para los tipos de datos BSON que no tienen un equivalente directo en Parquet, como JavaScript, expresiones regulares, etc.:
Elige una representación que permita que el archivo Parquet resultante pueda leerse con una herramienta ajena a MongoDB.
Almacena un esquema de MongoDB en los metadatos de clave/valor del archivo Parquet para que Atlas Data Federation pueda reconstruir el documento BSON original BSON original con los tipos de datos correctos si Atlas Data Federation vuelve a leer el archivo Parquet.
Considerar los siguientes documentos BSON:
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers": ["345-6789"], "clientInfo": { "name": "Jordan" } }
Si guardas los siguientes documentos BSON en formato Parquet usando $out a GCP, el esquema de archivos Parquet para tus documentos BSON sería similar a lo siguiente:
message root { optional group clientId { optional int32 int; optional binary string (STRING); } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
Los datos de Parquet en Google Cloud Storage se verían similares a los siguientes:
clientId: .int = 102 phoneNumbers: .list: ..element = "123-4567" .list: ..element = "234-5678" clientInfo: .name = "Taylor" .occupation = "teacher" clientId: .string = "237" phoneNumbers: .list: ..element = "345-6789" clientInfo: .name = "Jordan"
El ejemplo anterior demuestra cómo Atlas Data Federation gestiona los tipos de datos complejos:
Atlas Data Federation mapea documentos en todos los niveles a un grupo Parquet.
Atlas Data Federation codifica arreglos usando el tipo lógico
LISTy la estructura obligatoria de lista o elemento de tres niveles. Para obtener más información, consulta Listas.Atlas Data Federation asigna campos BSON polimórficos a un grupo de múltiples columnas de tipo único porque Parquet no admite columnas polimórficas. Atlas Data Federation nombra al grupo según el campo BSON. En el ejemplo anterior, Atlas Data Federation crea un grupo Parquet denominado
clientIdpara el campo polimórfico denominadoclientIdcon dos elementos secundarios denominados según sus tipos BSON,intystring.
Esta sección se aplica sólo a las ofertas de almacenamiento de los proveedores de servicios en la nube.
Salida de errores
Atlas Data Federation utiliza el mecanismo de gestión de errores que se describe a continuación para los documentos que entran en la fase $out y no se pueden escribir por uno de los siguientes motivos:
El
s3.filenameno se evalúa como un valor de string.El
s3.filenamese evalúa como un archivo al que no se puede escribir.s3.format.nameestá configurado encsv,tsv,csv.gzotsv.gzy el documento pasado a$outcontiene tipos de datos no admitidos por el formato de archivo especificado. Para obtener una lista completa de tipos de datos no admitidos, consulta Formato de archivo CSV y TSV.
Si $out encuentra uno de los errores anteriores durante el procesamiento de un documento, Atlas Data Federation guardar en los tres archivos de error especiales siguientes en la ruta s3://<bucket-name>/atlas-data-lake-<correlation-id>/:
Nombre del archivo de error | Descripción |
|---|---|
out-error-docs/<i>.json | Atlas Data Federation guarda el documento que tuvo un error en este archivo. |
out-error-index/<i>.json | Atlas Data Federation guarda un mensaje de error en este archivo. Cada mensaje de error contiene una descripción del error y un valor de índice |
out-error-summary.json | Atlas Data Federation escribe un único documento resumen para cada tipo de error encontrado durante una operación de agregación en este archivo. Cada documento resumen contiene una descripción del tipo de error y un recuento del número de documentos que encontraron ese tipo de error. |
Este ejemplo muestra cómo generar archivos de error utilizando $out en una instancia federada de base de datos.
El siguiente pipeline de agregación ordena los documentos en la colección de conjuntos de datos de muestra analytics.customers en orden descendente de fecha de nacimiento del cliente e intenta guardar los campos _id, name y accounts de los tres clientes más jóvenes en el archivo denominado youngest-customers.csv en el bucket S3 denominado customer-data.
db.customers.aggregate([ { "$sort": { "birthdate": -1 } }, { "$unset": [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { "$limit": 3 }, { "$out": { "s3": { "bucket": "customer-data", "region": "us-east-2", "filename": "youngest-customers", "format": { "name": "csv" } } } } ])
Debido a que accounts es un campo de arreglo, $out encuentra un error cuando intenta guardar un documento en s3.format.name csv. Para gestionar estos errores, Atlas Data Federation guarda en los siguientes tres archivos de error:
La siguiente salida muestra el primero de tres documentos escritos en el archivo
out-error-docs/1.json:s3://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-docs/1.json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}] } La siguiente salida muestra el primero de tres mensajes de error escritos en el archivo
out-error-index/1.json. El camponcomienza en 0 y aumenta por cada error escrito en el archivo.s3://cliente-data/atlas-lago de datos-1773b3d5e2a7f3858530daf5/out-error-índice/1.json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } La siguiente salida muestra el documento de resumen de errores escrito en el archivo
out-error-summary. El campocountrepresenta el número de documentos pasados a$outque encontraron un error debido al campo de arregloaccounts.s3://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
Atlas Data Federation utiliza el mecanismo de gestión de errores que se describe a continuación para los documentos que entran en la fase $out y no se pueden escribir por uno de los siguientes motivos:
El
azure.filenameno se evalúa como un valor de string.El
azure.filenamese evalúa como un archivo al que no se puede escribir.azure.format.nameestá configurado encsv,tsv,csv.gzotsv.gzy el documento pasado a$outcontiene tipos de datos no admitidos por el formato de archivo especificado. Para obtener una lista completa de tipos de datos no admitidos, consulta Formato de archivo CSV y TSV.
Si $out encuentra uno de los errores anteriores durante el procesamiento de un documento, Atlas Data Federation guardar en los tres archivos de error especiales siguientes en la ruta http://<storage-account>.blob.core.windows.net/<container-name>/atlas-data-lake-<correlation-id>/:
Nombre del archivo de error | Descripción |
|---|---|
out-error-docs/<i>.json | Atlas Data Federation guarda el documento que encontró un error en este archivo.
|
out-error-index/<i>.json | Atlas Data Federation escribe un mensaje de error en este archivo. Cada mensaje de error contiene una descripción del error y un valor de índice
|
out-error-summary.json | Atlas Data Federation escribe un único documento resumen para cada tipo de error encontrado durante una operación de agregación en este archivo. Cada documento resumen contiene una descripción del tipo de error y un recuento del número de documentos que encontraron ese tipo de error. |
Este ejemplo muestra cómo generar archivos de error utilizando $out en una instancia federada de base de datos.
El siguiente pipeline de agregación ordena los documentos en la colección de conjuntos de datos de muestra analytics.customers por fecha de nacimiento del cliente en orden descendente e intenta guardar los campos _id, name y accounts de los tres clientes más jóvenes en el archivo denominado youngest-customers.csv en el contenedor de Azure Blob Storage denominado customer-data.
db.customers.aggregate([ { "$sort": { "birthdate": -1 } }, { "$unset": [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { "$limit": 3 }, { "$out": { "azure": { "serviceURL": "https://mystorageaccount.blob.core.windows.net/", "containerName": "customer-data", "region": "eastus2", "filename": "youngest-customers", "format": { "name": "csv" } } } } ])
Debido a que accounts es un campo de arreglo, $out encuentra un error cuando intenta guardar un documento en azure.format.name csv. Para gestionar estos errores, Atlas Data Federation guarda en los siguientes tres archivos de error:
La siguiente salida muestra el primero de tres documentos escritos en el archivo
out-error-docs/1.json:http://mystorageaccount.blob.core.windows.net/customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-docs/1.json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}] } La siguiente salida muestra el primero de tres mensajes de error escritos en el archivo
out-error-index/1.json. El camponcomienza en 0 y aumenta por cada error escrito en el archivo.http://mystorageaccount.blob.core.windows.net/customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-index/1.json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } La siguiente salida muestra el documento de resumen de errores escrito en el archivo
out-error-summary. El campocountrepresenta el número de documentos pasados a$outque encontraron un error debido al campo de arregloaccounts.http://mystorageaccount.blob.core.windows.net/customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
Atlas Data Federation utiliza el mecanismo de gestión de errores que se describe a continuación para los documentos que entran en la fase $out y no se pueden escribir por uno de los siguientes motivos:
El
gcs.filenameno se evalúa como un valor de string.El
gcs.filenamese evalúa como un archivo al que no se puede escribir.gcs.format.nameestá configurado encsv,tsv,csv.gzotsv.gzy el documento pasado a$outcontiene tipos de datos no admitidos por el formato de archivo especificado. Para obtener una lista completa de tipos de datos no admitidos, consulta Formato de archivo CSV y TSV.
Si $out encuentra uno de los errores anteriores durante el procesamiento de un documento, Atlas Data Federation guardar en los tres archivos de error especiales siguientes en la ruta gcs://<bucket-name>/atlas-data-lake-<correlation-id>/:
Nombre del archivo de error | Descripción |
|---|---|
out-error-docs/<i>.json | Atlas Data Federation guarda el documento que tuvo un error en este archivo. |
out-error-index/<i>.json | Atlas Data Federation guarda un mensaje de error en este archivo. Cada mensaje de error contiene una descripción del error y un valor de índice |
out-error-summary.json | Atlas Data Federation escribe un único documento resumen para cada tipo de error encontrado durante una operación de agregación en este archivo. Cada documento resumen contiene una descripción del tipo de error y un recuento del número de documentos que encontraron ese tipo de error. |
Este ejemplo muestra cómo generar archivos de error utilizando $out en una instancia federada de base de datos.
El siguiente pipeline de agregación ordena los documentos de la colección del conjunto de datos de muestra analytics.customers por fecha de nacimiento del cliente de forma descendente e intenta escribir los campos _id, name y accounts de los tres clientes más jóvenes en el archivo llamado youngest-customers.csv en el bucket de Google Cloud almacenamiento llamado customer-data.
db.customers.aggregate([ { "$sort": { "birthdate": -1 } }, { "$unset": [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { "$limit": 3 }, { "$out": { "gcs": { "bucket": "customer-data", "region": "us-central1", "filename": "youngest-customers", "format": { "name": "csv" } } } } ])
Debido a que accounts es un campo de arreglo, $out encuentra un error cuando intenta guardar un documento en gcs.format.name csv. Para gestionar estos errores, Atlas Data Federation guarda en los siguientes tres archivos de error:
La siguiente salida muestra el primero de tres documentos escritos en el archivo
out-error-docs/1.json:gcs://cliente-data/atlas-lago de datos-1773b3d5e2a7f3858530daf5/out-error-docs/1.json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}] } La siguiente salida muestra el primero de tres mensajes de error escritos en el archivo
out-error-index/1.json. El camponcomienza en 0 y aumenta por cada error escrito en el archivo.gcs://cliente-data/atlas-lago de datos-1773b3d5e2a7f3858530daf5/out-error-índice/1.json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } La siguiente salida muestra el documento de resumen de errores escrito en el archivo
out-error-summary. El campocountrepresenta el número de documentos pasados a$outque encontraron un error debido al campo de arregloaccounts.gcs://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
Esta sección solo se aplica al almacenamiento del proveedor de servicios en la nube.