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:
- Strumento Copia dati
- Il portale di Azure
- .NET SDK
- SDK di Python
- Azure PowerShell
- API REST
- Modello di Azure Resource Manager
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.
Passare alla scheda Gestisci nell'area di lavoro di Azure Data Factory o Synapse e selezionare Servizi collegati, quindi fare clic su Nuovo:
Cercare Mongo e selezionare il connettore di MongoDB.
Configurare i dettagli del servizio, testare la connessione e creare il nuovo servizio collegato.
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 | Sì |
server | Indirizzo IP o nome host del server MongoDB. | Sì |
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. | Sì |
authenticationType | Tipo di autenticazione usato per connettersi al database MongoDB. I valori consentiti sono: Di base e Anonima. |
Sì |
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 | Sì |
collectionName | Nome della raccolta nel database MongoDB. | Sì |
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 | Sì |
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 |
Contenuto correlato
Per un elenco degli archivi dati supportati come origini e sink dall'attività Copy, vedere Archivi dati supportati.