Copia de datos de MongoDB con Azure Data Factory o Synapse Analytics (versión heredada)

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Sugerencia

Pruebe Data Factory en Microsoft Fabric, una solución de análisis todo en uno para empresas. Microsoft Fabric abarca todo, desde el movimiento de datos hasta la ciencia de datos, el análisis en tiempo real, la inteligencia empresarial y los informes. Obtenga información sobre cómo iniciar una nueva evaluación gratuita.

En este artículo se describe el uso de la actividad de copia en una canalización de Azure Data Factory o Synapse Analytics para copiar datos de MongoDB. El documento se basa en el artículo de introducción a la actividad de copia que describe información general de la actividad de copia.

Importante

El servicio ha publicado un nuevo conector de MongoDB, que proporciona una mejor compatibilidad nativa con MongoDB en comparación con esta implementación basada en ODBC; para obtener más información, vea el artículo Conector de MongoDB.

Funcionalidades admitidas

Puede copiar datos desde la base de datos MongoDB en cualquier almacén de datos receptor compatible. Consulte la tabla de almacenes de datos compatibles para ver una lista de almacenes de datos que la actividad de copia admite como orígenes o receptores.

En concreto, este conector MongoDB admite las siguientes funcionalidades:

  • Versiones 2.4, 2.6, 3.0, 3.2, 3.4 y 3.6 de MongoDB.
  • Copiar datos mediante la autenticación Básica o Anónima.

Requisitos previos

Si el almacén de datos se encuentra en una red local, una red virtual de Azure o una nube privada virtual de Amazon, debe configurar un entorno de ejecución de integración autohospedado para conectarse a él.

Si el almacén de datos es un servicio de datos en la nube administrado, puede usar Azure Integration Runtime. Si el acceso está restringido a las direcciones IP que están aprobadas en las reglas de firewall, puede agregar direcciones IP de Azure Integration Runtime a la lista de permitidos.

También puede usar la característica del entorno de ejecución de integración de red virtual administrada de Azure Data Factory para acceder a la red local sin instalar ni configurar un entorno de ejecución de integración autohospedado.

Consulte Estrategias de acceso a datos para más información sobre los mecanismos de seguridad de red y las opciones que admite Data Factory.

El entorno Integration Runtime proporciona un controlador de MongoDB integrado, por lo tanto, no es necesario instalar manualmente los controladores cuando se copian datos desde MongoDB.

Introducción

Para realizar la actividad de copia con una canalización, puede usar una de los siguientes herramientas o SDK:

Creación de un servicio vinculado en MongoDB mediante la interfaz de usuario

Siga estos pasos para crear un servicio vinculado en MongoDB en la interfaz de usuario de Azure Portal.

  1. Vaya a la pestaña Administrar del área de trabajo de Azure Data Factory o Synapse y seleccione Servicios vinculados; luego haga clic en Nuevo:

  2. Busque MongoDB y seleccione el conector de MongoDB.

    Screenshot of the MongoDB connector.

  3. Configure los detalles del servicio, pruebe la conexión y cree el nuevo servicio vinculado.

    Screenshot of linked service configuration for MongoDB.

Detalles de configuración del conector

Las secciones siguientes proporcionan detalles sobre las propiedades que se usan para definir entidades de Data Factory específicas del conector MongoDB.

Propiedades del servicio vinculado

Las siguientes propiedades son compatibles con el servicio vinculado de MongoDB:

Propiedad Descripción Obligatorio
type La propiedad type debe establecerse en: MongoDB
server Dirección IP o nombre de host del servidor de MongoDB.
port Puerto TCP que el servidor de MongoDB utiliza para escuchar las conexiones del cliente. No (el valor predeterminado es 27017)
databaseName Nombre de la base de datos de MongoDB a la que desea acceder.
authenticationType Tipo de autenticación usado para conectarse a la base de datos MongoDB.
Los valores permitidos son: Basic (básica) y Anonymous (anónima).
username Cuenta de usuario para tener acceso a MongoDB. Sí (si se usa la autenticación básica).
password Contraseña del usuario. Marque este campo como SecureString para almacenarlo de forma segura, o bien haga referencia a un secreto almacenado en Azure Key Vault. Sí (si se usa la autenticación básica).
authSource Nombre de la base de datos de MongoDB que desea usar para comprobar las credenciales de autenticación. No. Para la autenticación básica, el valor predeterminado se utiliza la cuenta de administrador y la base de datos especificada mediante la propiedad databaseName.
enableSsl Especifica si las conexiones al servidor se cifran mediante TLS. El valor predeterminado es false. No
allowSelfSignedServerCert Especifica si se permiten los certificados autofirmados del servidor. El valor predeterminado es false. No
connectVia El entorno Integration Runtime que se usará para conectarse al almacén de datos. Obtenga más información en la sección Requisitos previos. Si no se especifica, se usará Azure Integration Runtime. No

Ejemplo:

{
    "name": "MongoDBLinkedService",
    "properties": {
        "type": "MongoDb",
        "typeProperties": {
            "server": "<server name>",
            "databaseName": "<database name>",
            "authenticationType": "Basic",
            "username": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propiedades del conjunto de datos

Para ver una lista completa de las secciones y propiedades disponibles para definir conjuntos de datos, consulte Conjuntos de datos y servicios vinculados. Las siguientes propiedades son compatibles con el conjunto de datos de MongoDB:

Propiedad Descripción Obligatorio
type La propiedad type del conjunto de datos debe establecerse en: MongoDbCollection
collectionName Nombre de la colección en la base de datos de MongoDB.

Ejemplo:

{
    "name": "MongoDbDataset",
    "properties": {
        "type": "MongoDbCollection",
        "linkedServiceName": {
            "referenceName": "<MongoDB linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "collectionName": "<Collection name>"
        }
    }
}

Propiedades de la actividad de copia

Si desea ver una lista completa de las secciones y propiedades disponibles para definir actividades, consulte el artículo sobre canalizaciones. En esta sección se proporciona una lista de las propiedades que admite el origen MongoDB.

MongoDB como origen

Se admiten las siguientes propiedades en la sección source de la actividad de copia:

Propiedad Descripción Obligatorio
type La propiedad type del origen de la actividad de copia debe establecerse en: MongoDbSource
Query Utilice la consulta SQL-92 personalizada para leer los datos. Por ejemplo: select * from MyTable. No (si se especifica "collectionName" en el conjunto de datos)

Ejemplo:

"activities":[
    {
        "name": "CopyFromMongoDB",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<MongoDB input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "MongoDbSource",
                "query": "SELECT * FROM MyTable"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Sugerencia

Cuando se especifica la consulta SQL, preste atención a la diferencia del formato de fecha y hora. Por ejemplo: SELECT * FROM Account WHERE LastModifiedDate >= '2018-06-01' AND LastModifiedDate < '2018-06-02' o para usar el parámetro SELECT * FROM Account WHERE LastModifiedDate >= '@{formatDateTime(pipeline().parameters.StartTime,'yyyy-MM-dd HH:mm:ss')}' AND LastModifiedDate < '@{formatDateTime(pipeline().parameters.EndTime,'yyyy-MM-dd HH:mm:ss')}'

Esquema de Data Factory

El servicio de Azure Data Factory deduce el esquema de una colección de MongoDB mediante el uso de los últimos 100 documentos de la colección. Si estos 100 documentos no contienen el esquema completo, se pueden omitir algunas columnas durante la operación de copia.

Asignación de tipos para MongoDB

Al copiar datos desde MongoDB, se utilizan las siguientes asignaciones de tipos de datos de MongoDB a los tipos de datos provisionales usados internamente dentro del servicio. Consulte el artículo sobre asignaciones de tipos de datos y esquema para información sobre cómo la actividad de copia asigna el tipo de datos y el esquema de origen al receptor.

Tipo de datos de MongoDB Tipo de datos de servicio provisional
Binary Byte[]
Boolean Boolean
Date DateTime
NumberDouble Double
NumberInt Int32
NumberLong Int64
ObjectID String
String String
UUID Guid
Object Renormalizado en columnas acopladas con "_" como separador anidado

Nota

Para obtener más información sobre la compatibilidad con matrices con tablas virtuales, consulte la sección Compatibilidad para tipos complejos que usan tablas virtuales que aparece más adelante.

Actualmente, los siguientes tipos de datos de MongoDB no se admiten: DBPointer, JavaScript, clave máx./mín., expresión regular, símbolo, marca de tiempo, sin definir.

Compatibilidad para tipos complejos que usan tablas virtuales

El servicio utiliza un controlador ODBC integrado para conectarse a una base de datos de MongoDB y copiar datos de ella. Para los tipos complejos como matrices u objetos con diferentes tipos en los documentos, el controlador volverá a normalizar los datos en las tablas virtuales correspondientes. En concreto, si una tabla contiene estas columnas, el controlador generará las siguientes tablas virtuales:

  • Una tabla base, que contiene los mismos datos que la tabla real, salvo las columnas de tipo complejo. La tabla base utiliza el mismo nombre que la tabla real a la que representa.
  • Una tabla virtual para cada columna de tipo complejo, que ampliará los datos anidados. Para asignar un nombre a las tablas virtuales, se utiliza el nombre de la tabla real, un separador "_" y el nombre de la matriz u objeto.

Las tablas virtuales hacen referencia a los datos de la tabla real, lo que permite al controlador acceder a los datos no normalizados. Para acceder al contenido de las matrices de MongoDB, puede crear consultas y combinar las tablas virtuales.

Ejemplo

Por ejemplo, la tabla "ExampleTable" que aparece a continuación es una tabla de MongoDB que tiene una columna con una matriz de objetos en cada celda: Facturas y una columna con una matriz de tipos escalares, Clasificaciones.

_id Nombre del cliente Facturas Nivel de servicio Clasificaciones
1111 ABC [{invoice_id:"123", item:"toaster", price:"456", discount:"0.2"}, {invoice_id:"124", item:"oven", price: "1235", discount: "0.2"}] Plata [5,6]
2222 XYZ [{invoice_id:"135", item:"fridge", price: "12543", discount: "0.0"}] Oro [1,2]

El controlador generará varias tablas virtuales que representan a esta tabla. La primera tabla virtual es la tabla base y se denomina “ExampleTable”, tal y como se muestra en el ejemplo. La tabla base contiene todos los datos de la tabla original, pero los datos de las matrices se han omitido y se ampliarán en las tablas virtuales.

_id Nombre del cliente Nivel de servicio
1111 ABC Plata
2222 XYZ Oro

Las siguientes tablas muestran las tablas virtuales que representan las matrices originales en el ejemplo. Estas tablas contienen lo siguiente:

  • Una referencia a la columna de clave principal original correspondiente a la fila de la matriz original (a través del identificador de la columna)
  • Una indicación de la posición de los datos dentro de la matriz original
  • Los datos ampliados para cada elemento de la matriz

Tabla "ExampleTable_Invoices":

_id ExampleTable_Invoices_dim1_idx invoice_id item price Descuento
1111 0 123 tostadora 456 0,2
1111 1 124 horno 1235 0,2
2222 0 135 frigorífico 12543 0,0

Tabla "ExampleTable_Ratings":

_id ExampleTable_Ratings_dim1_idx ExampleTable_Ratings
1111 0 5
1111 1 6
2222 0 1
2222 1 2

Para obtener una lista de almacenes de datos que la actividad de copia admite como orígenes y receptores, vea Almacenes de datos que se admiten.