Docs Menu
Docs Home
/ /

Definir la sintaxis del archivo de ruta

Nota

Para simplificar la documentación, los ejemplos que se encuentran en esta página se basan en almacenes de datos en AWS S,3 sin embargo, también se aplican a Google Cloud y Azure Private Link.

Cuando consulta documentos en su almacén de datos, Atlas Data Federation path El valor permite que Data Federation asigne los datos dentro de su documento al nombre de archivo del documento.

path Permite analizar nombres de archivos en sus almacenes de datos para convertirlos en campos calculados. La Federación de Datos puede agregar los campos calculados a cada documento generado a partir del archivo analizado. La Federación de Datos puede dirigir las consultas sobre esos valores de campo calculados únicamente a los archivos con un nombre coincidente. Consulte Funciones de análisis admitidas y ejemplos para obtener más información.

path también admite la creación de particiones utilizando atributos de partición en la ruta al archivo. La Data Federation puede aplicar queries sobre el parámetro definido en el atributo de partición únicamente a aquellos archivos que contengan la query en el nombre del archivo o en el prefijo de la partición.

Ejemplo

Considere los siguientes archivos en su depósito 3 S:

/users/26/1234.json
/users/26/5678.json

El documento JSON 1234.json contiene lo siguiente:

{
"name": "jane doe",
"age": 26,
"userID": "1234"
}

La configuración de su instancia de base de datos federada para los archivos en su depósito S define lo3 path siguiente:

"path": "/users/{age int}/{userID string}"

A continuación se muestra cómo Data Federation asigna una consulta a las particiones creadas a partir de la definición path:

db.users.findOne( /users
{ /40
"age": 26 -----------------> /26
"userID": "1234" ----------> /1234.json
} /5678.json
)

Si el campo calculado para el atributo de partición ya existe en el documento, la Federación de Datos asigna la consulta al archivo correspondiente. Si el campo calculado no existe, la Federación de Datos lo añade al documento. Por ejemplo, si el campo age no existe en 1234.json, la Federación de Datos añade el campo age y su valor a 1234.json.

Puede especificar una única función de análisis en el nombre del archivo.

/path/to/files/{<fieldA> <data-type>}

Puede especificar varias funciones de análisis en el nombre del archivo.

/path/to/files/{<fieldA> <data-type>}-{<fieldB> <data-type>}

Puede especificar funciones de análisis junto con cadenas estáticas en el nombre del archivo:

/path/to/files/prefix-{<fieldA> <data-type>}-suffix

Puede especificar un punto (es decir, .) a lo largo de la ruta al nombre del archivo.

/path/to/files/{<fieldA>.<fieldB> <data-type>}

Puede especificar ObjectIds en la ruta a los archivos para crear particiones.

/path/to/files/{objid objectid}

Puede especificar un rango de ObjectIds en la ruta a los archivos para crear particiones.

/path/to/files/{min(obj) objectid}-{max(obj) objectid}

Puede especificar funciones de análisis a lo largo de la ruta hasta el nombre del archivo.

/path/{<fieldA> <data-type>}/{<fieldB> <data-type>}/{<fieldC> <data-type>}/*

Puede especificar expresiones regulares para ISODate a lo largo de la ruta al nombre del archivo.

/path/to/files/{<field-name> isodate("<date-format>"):\\<regex>}

Nota

Al path especificar:

  • Especifique el tipo de datos para el atributo de partición.

  • Asegúrese de que el tipo de atributo de partición coincida con el tipo de datos a analizar.

  • Utilice el delimitador especificado delimiter en.

Al especificar atributos del mismo tipo, realice cualquiera de las siguientes acciones:

  • Añade un separador constante entre los atributos.

  • Utilice expresiones regulares para describir el patrón de búsqueda. Para obtener más información, consulte Funciones de análisis no compatibles.

La Federación de Datos analiza automáticamente una cadena vacía ("") en lugar de un atributo en la ruta del archivo como valor nulo BSON para todos los tipos de atributo de la Federación de Datos de Atlas, excepto string. Con string, una cadena vacía podría representar un valor nulo BSON o una cadena vacía BSON. La Federación de Datos de Atlas no analiza ningún valor BSON para el tipo de atributo string. Esto evita agregar un valor BSON con un tipo conflictivo a los documentos leídos desde el almacén de datos.

Ejemplo

Considere el siguiente almacén de instancias de base de datos federada 3 S:

/records/january/1.json
/records/february/1.json
/records//1.json
For the path ``/records/{month string}/*``, Data Federation does not add any
computed fields for the ``month`` attribute to documents generated
from the third record in the above store.

Nota

Al escribir archivos en S,3 escriba los valores nulos BSON como cadenas vacías en los nombres de archivo para todos los tipos de atributos de Atlas Data Federation.

La ruta del archivo puede incluir valores numéricos rellenados con ceros a la izquierda. Para que la Federación de Datos analice correctamente los valores numéricos rellenados para tipos de atributos como int, epoch_millis y epoch_secs, especifique el número de dígitos del valor mediante expresiones regulares.

Ejemplo

Considere una tienda S3 con los siguientes archivos:

|--users
|--001.json
|--002.json
...

La siguiente sintaxis path utiliza una expresión regular para especificar el número de dígitos del nombre de archivo. La federación de datos identifica la parte de la ruta que corresponde al atributo de partición y, a continuación, asigna dicho atributo a un tipo int:

/users/{user_id int:\\d{3}}

Especificar funciones de análisis consecutivas en el mismo nombre de archivo sin forma de diferenciarlas podría generar resultados inconsistentes.

Ejemplo

Considere una tienda S3 con los siguientes archivos:

|--food
|--icecream
|--peanutbutter

Ahora considere la siguiente ruta a los archivos en el directorio food:

/food/{first string}{second string}/

No hay forma de determinar qué parte de la subcadena del nombre de archivo debe coincidir con los atributos de cadena first y second. Por lo tanto, Atlas Data Federation coincide con todo first.

Considere utilizar atributos con expresiones regulares similares a las siguientes:

  • /food/{first string:\\D{3}}{second string:\\D{5}}

    La ruta anterior especifica que first coincide con 3 caracteres que no son dígitos y second coincide con los siguientes 5 caracteres que no son dígitos.

  • /food/{first string:[A-Z]{3}}{second string:[a-z]{5}}

    La ruta anterior coincide con first a 3 letras mayúsculas y second a 5 letras minúsculas.

Los siguientes ejemplos demuestran cómo analizar nombres de archivos en campos calculados:

Considere un almacén de instancias de base de datos federada accountingArchive que contiene archivos cuyo nombre describe una fecha de factura. Por ejemplo, el nombre de archivo /invoices/1564671291998.json contiene las facturas con la marca de tiempo UNIX 1564671291998.

El siguiente objeto genera un databases campo invoiceDate al analizar el nombre del archivo como una marca de tiempo de UNIX:

"databases" : [
{
"name" : "accounting",
"collections" : [
{
"name" : "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{invoiceDate epoch_millis}"
}
]
}
]
}
]

La Federación de Datos añade el campo calculado y el valor a cada documento generado a partir del nombre de archivo. Los documentos generados a partir del nombre de archivo de ejemplo incluyen el campo invoiceDate: ISODate("2019-08-01T14:54:51Z"). Las consultas en el campo invoiceDate solo se pueden dirigir a los archivos que coincidan con el valor especificado.

Considere un almacén de instancias de base de datos federada accountingArchive que contiene archivos cuyo nombre describe el número y la fecha de una factura. Por ejemplo, el nombre de archivo /invoices/MONGO12345-1564671291998.json contiene la factura MONGODB12345 para la marca de tiempo UNIX 1564671291998.

El siguiente objeto databases genera:

  • Un campo invoiceNumber analizando el primer segmento del nombre de archivo como una cadena.

  • Un campo invoiceDate al analizar el segundo segmento del nombre del archivo como una marca de tiempo UNIX.

"databases" : [
{
"name": "accounting",
"collections" : [
{
"name" : "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{invoiceNumber string}-{invoiceDate epoch_millis}"
}
]
}
]
}
]

La federación de datos agrega los campos y valores calculados a cada documento generado a partir del nombre de archivo. Los documentos generados a partir del nombre de archivo de ejemplo incluyen los siguientes campos:

  • invoiceNumber : "MONGODB12345"

  • invoiceDate : ISODate("2019-08-01T14:54:51Z")

Las consultas que incluyen los campos y se pueden dirigir únicamente a aquellos archivos que coincidan con los invoiceNumber valores especificados.invoiceDate

Considere un almacén de instancias de base de datos federada accountingArchive que contiene archivos cuyo nombre describe el número y la fecha de una factura. Por ejemplo, el nombre de archivo /invoices/MONGODB12345-20190102.json contiene la factura MONGODB12345 de la fecha 20190102.

El siguiente objeto databases genera:

  • Un campo invoiceNumber analizando el primer segmento del nombre de archivo como una cadena

  • Un campo year mediante el uso de una expresión regular para analizar solo los primeros 4 dígitos del segundo segmento del nombre de archivo como un int.

  • Un campo month mediante el uso de una expresión regular para analizar solo los 2 dígitos siguientes del segundo segmento del nombre de archivo como un número entero.

  • Un campo day mediante el uso de una expresión regular para analizar solo los 2 dígitos siguientes del segundo segmento del nombre de archivo como un número entero.

"databases" : [
{
"name" : "accounting",
"collections" : [
{
"name" : "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{invoiceNumber string}-{year int:\\d{4}}{month int:\\d{2}}{day int:\\d{2}}"
}
]
}
]
}
]

La federación de datos agrega los campos y valores calculados a cada documento generado a partir del nombre de archivo. Los documentos generados a partir del nombre de archivo de ejemplo incluyen los siguientes campos:

  • invoiceNumber : "MONGODB12345"

  • year : 2019

  • month: 01

  • day: 02

Importante

Debes escapar la cadena de expresiones regulares especificada path en. Por ejemplo, si la cadena incluye comillas dobles, debes escapar esos valores. La Federación de Datos admite la sintaxis de paquete. para expresiones regulares en la configuración de almacenamiento.

Las consultas que incluyen todos los campos generados se pueden orientar únicamente a aquellos archivos que coincidan con los valores especificados.

Tip

Considere un almacén de instancias de base de datos federada accountingArchive que contiene archivos cuyo nombre describe el rango de datos que contiene. Por ejemplo, el nombre de archivo /invoices/1546367712000-1549046112000.json contiene facturas del período comprendido entre 2019-01-01 y 2019-01-02, con el rango de fechas representado en milisegundos transcurridos desde la época de UNIX.

El siguiente objeto databases identifica el rango de tiempo mínimo como el primer segmento del nombre del archivo y el rango de tiempo máximo como el segundo segmento del nombre del archivo:

"databases" : [
{
"name: "accounting",
"collections" : [
{
"name: "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{min(invoiceDate) epoch_millis}-{max(invoiceDate) epoch_millis}"
}
]
}
]
}
]

Cuando Data Federation recibe una consulta en el campo "invoiceDate", utiliza la ruta especificada para identificar qué archivos contienen los datos que coinciden con la consulta.

Las consultas en el campo invoiceDate se pueden dirigir únicamente a aquellos archivos cuyo rango capture el valor especificado, incluidas las fechas min y max.

Importante

El campo especificado para los rangos mínimo y máximo debe existir en cada documento contenido en el archivo para evitar comportamientos inesperados o indeseados. La Federación de Datos no realiza ninguna validación de que los datos subyacentes cumplan con esta restricción.

La federación de datos permite consultar datos anidados cuando el valor de estos también es el nombre del archivo. Puede usar el operador de punto (es. decir,) en su para asignar los atributos de las particiones de su configuración de almacenamiento a los campos anidados de sus path documentos.

Considere un almacén de instancias de base de datos federada accountingArchive. Este almacén contiene archivos cuyos nombres coinciden con los valores de los campos anidados en los documentos. Por ejemplo:

accountingArchive
|--invoices
|--January.json
|--February.json
...

Supongamos que el archivo January.json contiene un documento con los siguientes campos:

{
"invoice": {
"invoiceNumber" : "MONGODB12345",
"year" : 2019,
"month": "January", //value matches filename
"date": 02
},
"vendor": "MONGODB",
...
}

El siguiente objeto databases identifica month como un campo anidado dentro de un documento. El objeto también identifica el valor databases de month como el nombre del archivo que contiene el documento.

"databases" : [
{
"name" : "accounting",
"collections" : [
{
"name" : "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{invoice.month string}"
}
]
}
]
}
]

Cuando Atlas Data Federation recibe una consulta sobre un mes específico, como January, utiliza la ruta especificada para identificar qué archivo contiene los datos que coinciden con la consulta.

Puede especificar ObjectIds en la ruta de los archivos. Para los archivos que contienen ObjectId en el nombre, Atlas Data Federation crea particiones para ObjectId cada.

Considere el siguiente almacén de instancias de base de datos federada, accountingArchive. Este almacén de datos contiene archivos cuyo nombre incluye ObjectId:

accountingArchive
|--invoices
|--507f1f77bcf86cd799439011.json
|--507f1f77bcf86cd799439012.json
|--507f1f77bcf86cd799439013.json
|--507f1f77bcf86cd799439014.json
|--507f1f77bcf86cd799439015.json

El siguiente objeto crea databases particiones ObjectIds para.

"databases" : [
{
"name" : "accounting",
"collections" : [
{
"name" : "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{objid objectid}"
}
]
}
]
}
]

O bien, supongamos que el almacén de instancias de base de datos federada accountingArchive contiene archivos cuyo nombre incluye un rango de ObjectIds. Por ejemplo:

accountingArchive
|--invoices
|--507f1f77bcf86cd799439011-507f1f77bcf86cd799439020.json
|--507f1f77bcf86cd799439021-507f1f77bcf86cd799439030.json
|--507f1f77bcf86cd799439031-507f1f77bcf86cd799439040.json

El siguiente objeto crea particiones para el rango databases dado ObjectIds de.

"databases" : [
{
"name" : "accounting",
"collections" : [
{
"name" : "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{min(obj) objectid}-{max(obj) objectid}"
}
]
}
]
}
]

Cuando Data Federation recibe una consulta en ObjectId, utiliza la ruta especificada para identificar qué archivo contiene los datos que coinciden con la consulta.

Puede especificar funciones de análisis en cualquier ruta que conduzca al nombre del archivo. Cada campo calculado se basa en una función de análisis a lo largo de la ruta. Al consultar los datos, Atlas Data Federation convierte cada campo calculado en una partición. Las particiones, que son sinónimo de subdirectorios, se utilizan para filtrar archivos con mayor precisión.

Considere un almacén de instancias de base de datos federada accountingArchive con la siguiente estructura de directorio:

invoices
|--MONGO12345
|--2019
|--01
|--02

El siguiente objeto crea databases las invoiceNumber yearmonthparticiones,, y day con un pequeño conjunto de archivos filtrados:

"databases" : [
{
"name" : "accounting",
"collections" : [
{
"name" : "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{invoiceNumber string}/{year int}/{month int:\\d{2}}/{day int:\\d{2}}/*"
}
]
}
]
}
}

Puede especificar ISODate en la ruta de los archivos. Para los archivos que contienen ISODate en el nombre, Atlas Data Federation crea particiones para ISODate cada.

Considere el siguiente almacén de instancias de base de datos federada, accountingArchive. Este almacén de datos contiene archivos cuyo nombre incluye ISODate:

accountingArchive
|--invoices
|--01_02_2022_2301.json
|--02_02_2022_2301.json
|--03_02_2022_2301.json
|--04_02_2022_2301.json
|--05_02_2022_2301.json

El siguiente objeto crea particiones databases para.ISODate muestra path cómo usar expresiones regulares para el formato de fecha si esta no está en formato 3339 RFC.

"databases" : [
{
"name" : "accounting",
"collections" : [
{
"name" : "invoices",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/creationDate isodate('01_02_2006_1504'):\\d{2}_\\d{2}_\\d{4}_\\d{4}.json"
}
]
}
]
}
]

Para obtener más información sobre otros formatos admitidos, consulte Usar tipos de atributos de partición.

Considere un almacén de instancias de base de datos federada accountingArchive con la siguiente estructura de directorio:

invoices
|--SuperSoftware
|--UltraSoftware
|--MegaSoftware

El siguiente objeto genera un nombre de colección dinámico a partir de la ruta del databases archivo:

"databases" : [
{
"name" : "invoices",
"collections" : [
{
"name" : "*",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/invoices/{collectionName()}/"
}
]
}
]
}
]

Cuando se aplica a la estructura de directorio de ejemplo, la ruta da como resultado las siguientes colecciones:

  • SuperSoftware

  • UltraSoftware

  • MegaSoftware

O bien, considere una instancia de base de datos federada accountingArchive con los siguientes archivos:

/orders/MONGODB/invoices/January.json
/orders/MONGODB/purchaseOrders/January.json
/orders/MONGODB/invoices/February.json
...

El siguiente objeto genera un nombre de colección dinámico a partir de la ruta del databases archivo:

"databases" : [
{
"name" : "invoices",
"collections" : [
{
"name" : "*",
"dataSources" : [
{
"storeName" : "accountingArchive",
"path" : "/orders/MONGODB/{collectionName()}/{invoiceMonth string}.json/"
}
]
}
]
}
]

Cuando se aplica a los nombres de archivos de ejemplo, la ruta da como resultado las siguientes colecciones:

  • invoices

  • purchaseOrders

Nota

Cuando se generan colecciones dinámicamente a partir de nombres de archivos, la cantidad de colecciones no se informa con precisión en el Data Federation vista.

Volver

Generar colecciones