Condividi tramite


Copiare i dati da MongoDB usando Azure Data Factory o Synapse Analytics (legacy)

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Suggerimento

Provare Data Factory in Microsoft Fabric, una soluzione di analisi all-in-one per le aziende. Microsoft Fabric copre tutto, dallo spostamento dati al data science, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Vedere le informazioni su come iniziare una nuova prova gratuita!

Questo articolo illustra come usare l'attività Copy in una pipeline di Azure Data Factory o Synapse Analytics per copiare i dati da un database MongoDB. Si basa sull'articolo di panoramica dell'attività di copia che presenta una panoramica generale sull'attività di copia.

Importante

Il servizio ha rilasciato un nuovo connettore di MongoDB che offre un migliore supporto di MongoDB nativo rispetto a questa implementazione basata su ODBC. Per conoscere i dettagli, fare riferimento all'articolo sul connettore di MongoDB.

Funzionalità supportate

È possibile copiare dati da un database MongoDB in un qualsiasi archivio dati sink supportato. Per un elenco degli archivi dati supportati come origini/sink dall'attività di copia, vedere la tabella relativa agli archivi dati supportati.

In particolare, il connettore MongoDB supporta:

  • MongoDB versioni 2.4, 2.6, 3.0, 3.2, 3.4 e 3.6.
  • La copia dei dati usando l'autenticazione Di base o Anonima.

Prerequisiti

Se l'archivio dati si trova all'interno di una rete locale, una rete virtuale di Azure o un cloud privato virtuale di Amazon, è necessario configurare un runtime di integrazione self-hosted per connettersi.

Se l'archivio dati è un servizio dati del cloud gestito, è possibile usare Azure Integration Runtime. Se l'accesso è limitato solo agli indirizzi IP approvati nelle regole del firewall, è possibile aggiungere IP di Azure Integration Runtime nell'elenco Consentiti.

È anche possibile usare la funzionalitàruntime di integrazione della rete virtuale gestita in Azure Data Factory per accedere alla rete locale senza installare e configurare un runtime di integrazione self-hosted.

Per altre informazioni sui meccanismi di sicurezza di rete e sulle opzioni supportate da Data Factory, vedere strategie di accesso ai dati.

Il runtime di integrazione offre un driver per MongoDB predefinito e non è quindi necessario installare manualmente alcun driver quando si copiano dati da MongoDB.

Introduzione

Per eseguire l'attività di copia con una pipeline, è possibile usare uno degli strumenti o SDK seguenti:

Creare un servizio collegato a MongoDB usando l'interfaccia utente

Usare la procedura seguente per creare un servizio collegato a MongoDB nell'interfaccia utente del portale di Azure.

  1. Passare alla scheda Gestisci nell'area di lavoro di Azure Data Factory o Synapse e selezionare Servizi collegati, quindi fare clic su Nuovo:

  2. Cercare Mongo e selezionare il connettore di MongoDB.

    Screenshot del connettore di MongoDB.

  3. Configurare i dettagli del servizio, testare la connessione e creare il nuovo servizio collegato.

    Screenshot della configurazione del servizio collegato per MongoDB.

Dettagli di configurazione del connettore

Le sezioni seguenti riportano informazioni dettagliate sulle proprietà che vengono usate per definire entità di data factory specifiche per il connettore MongoDB.

Proprietà del servizio collegato

Per il servizio collegato di MongoDB sono supportate le proprietà seguenti:

Proprietà Descrizione Richiesto
type La proprietà type deve essere impostata su MongoDb
server Indirizzo IP o nome host del server MongoDB.
port Porta TCP che il server MongoDB usa per ascoltare le connessioni client. No (il valore predefinito è 27017)
databaseName Nome del database MongoDB a cui si vuole accedere.
authenticationType Tipo di autenticazione usato per connettersi al database MongoDB.
I valori consentiti sono: Di base e Anonima.
username Account utente per accedere a MongoDB. Sì (se si usa l'autenticazione di base).
password Password per l'utente. Contrassegnare questo campo come SecureString per archiviarlo in modo sicuro oppure fare riferimento a un segreto archiviato in Azure Key Vault. Sì (se si usa l'autenticazione di base).
authSource Nome del database MongoDB che si vuole usare per controllare le credenziali di autenticazione. No. Per l'autenticazione di base il valore predefinito usa l'account di amministrazione e il database specificati usando la proprietà databaseName.
enableSsl Specifica se le connessioni al server vengono crittografate tramite TLS. Il valore predefinito è false. No
allowSelfSignedServerCert Specifica se consentire o meno i certificati autofirmati dal server. Il valore predefinito è false. No
connectVia Il runtime di integrazione da usare per la connessione all'archivio dati. Per altre informazioni, vedere la sezione Prerequisiti. Se non specificato, viene usato il runtime di integrazione di Azure predefinito. No

Esempio:

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

Proprietà del set di dati

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione dei set di dati, vedere Set di dati e servizi collegati. Per il set di dati MongoDB sono supportate le proprietà seguenti:

Proprietà Descrizione Richiesto
type La proprietà type del set di dati deve essere impostata su: MongoDbCollection
collectionName Nome della raccolta nel database MongoDB.

Esempio:

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

Proprietà dell'attività di copia

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, vedere l'articolo sulle pipeline. Questa sezione presenta un elenco delle proprietà supportate dall'origine di MongoDB.

MongoDB come origine

Nella sezione origine dell'attività di copia sono supportate le proprietà seguenti:

Proprietà Descrizione Richiesto
type La proprietà type dell'origine dell'attività di copia deve essere impostata su: MongoDbSource
query Usare la query SQL-92 personalizzata per leggere i dati. Ad esempio: selezionare * da MyTable. No (se "collectionName" nel set di dati è specificato)

Esempio:

"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>"
            }
        }
    }
]

Suggerimento

Quando si specifica la query SQL, prestare attenzione al formato di DateTime. Ad esempio: SELECT * FROM Account WHERE LastModifiedDate >= '2018-06-01' AND LastModifiedDate < '2018-06-02' o per usare il parametro 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')}'

Schema da Data Factory

Il servizio Azure Data Factory deduce lo schema da una raccolta MongoDB usando gli ultimi 100 documenti nella raccolta. Se questi 100 documenti non contengono lo schema completo, alcune colonne possono essere ignorate durante l'operazione di copia.

Mapping del tipo di dati per MongoDB

Quando si copiano dati da MongoDB, i mapping seguenti vengono usati dai tipi di dati MongoDB ai tipi di dati provvisori usati internamente dal servizio. Vedere Mapping dello schema e del tipo di dati per informazioni su come l'attività di copia esegue il mapping dello schema di origine e del tipo di dati al sink.

Tipo di dati di MongoDB Tipo di dati del servizio provvisorio
Binario Byte[]
Booleano Booleano
Data Data/Ora
NumberDouble Double
NumberInt Int32
NumberLong Int64
ObjectID String
String String
UUID GUID
Object Rinormalizzato in colonne rese flat con "_" come separatore annidato

Nota

Per informazioni sul supporto di matrici che usano tabelle virtuali, vedere la sezione Supporto per tipi complessi con tabelle virtuali.

I tipi di dati MongoDB seguenti non sono attualmente supportati: DBPointer, JavaScript, chiave Max/Min, Espressione regolare, Simbolo, Timestamp, Undefined.

Supporto per tipi complessi con tabelle virtuali

Il servizio usa un driver ODBC integrato per connettersi ai dati di un database MongoDB e copiarli. Per i tipi complessi come le matrici o gli oggetti con tipi diversi tra i documenti, il driver rinormalizza i dati nelle tabelle virtuali corrispondenti. In particolare, se una tabella contiene tali colonne, il driver genera le tabelle virtuali seguenti:

  • Una tabella di baseche contiene gli stessi dati della tabella reale eccetto le colonne di tipo complesso. La tabella di base ha lo stesso nome della tabella reale che rappresenta.
  • Una tabella virtuale per ogni colonna di tipo complesso che espande i dati annidati. Alle tabelle virtuali vengono assegnati nomi composti dal nome della tabella reale seguito dal separatore "_" e dal nome della matrice o dell'oggetto.

Le tabelle virtuali fanno riferimento ai dati nella tabella reale, consentendo al driver di accedere ai dati denormalizzati. È possibile accedere al contenuto delle matrici MongoDB eseguendo query e join sulle tabelle virtuali.

Esempio

Ad esempio, ExampleTable qui è una tabella MongoDB che contiene una colonna con una matrice di oggetti in ogni cella, Fatture, e una colonna con una matrice di tipi scalari, Classificazioni.

_id Nome cliente Fatture Livello di servizio Valutazioni
1111 ABC [{invoice_id:"123", elemento:"tostapane", prezzo:"456", sconto:"0,2"}, {invoice_id:"124", elemento:"forno", prezzo: "1235", sconto: "0,2"}] Argento [5,6]
2222 XYZ [{invoice_id:"135", elemento:"frigorifero", prezzo: "12543", sconto: "0,0"}] Oro [1,2]

Il driver genera più tabelle virtuali per rappresentare questa singola tabella. La prima tabella virtuale è la tabella di base denominata "ExampleTable", illustrata nell'esempio. La tabella di base contiene tutti i dati della tabella originale, ma i dati dalle matrici sono stati omessi e vengono espansi nelle tabelle virtuali.

_id Nome cliente Livello di servizio
1111 ABC Argento
2222 XYZ Oro

Le tabelle seguenti illustrano le tabelle virtuali che rappresentano le matrici originali nell'esempio. In queste tabelle è possibile vedere:

  • Un riferimento alla colonna della chiave primaria originale corrispondente alla riga della matrice originale (con la colonna _id)
  • Un'indicazione della posizione dei dati all'interno della matrice originale
  • I dati espansi per ogni elemento all'interno della matrice

Tabella "ExampleTable_Invoices":

_id ExampleTable_Invoices_dim1_idx invoice_id oggetto price Discount
1111 0 123 toaster 456 0,2
1111 1 124 oven 1235 0,2
2222 0 135 fridge 12543 0.0

Tabella "ExampleTable_Ratings":

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

Per un elenco degli archivi dati supportati come origini e sink dall'attività Copy, vedere Archivi dati supportati.