Condividi tramite


Copiare e trasformare i dati in Database di Azure per PostgreSQL usando Azure Data Factory o Synapse Analytics

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Suggerimento

Provare Data Factory in Microsoft Fabric, una soluzione di analisi completa per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .

Questo articolo illustra come usare l'attività di copia nelle pipeline di Azure Data Factory e Synapse Analytics per copiare dati da e verso Database di Azure per PostgreSQL e usare Flusso di dati per trasformare i dati in Database di Azure per PostgreSQL. Per altre informazioni, vedere gli articoli introduttivi per Azure Data Factory e Synapse Analytics.

Questo connettore è specializzato per il servizio Database di Azure per PostgreSQL. Per copiare dati da un database PostgreSQL generico che si trova in locale o nel cloud, usare il connettore PostgreSQL.

Funzionalità supportate

Questo connettore Database di Azure per PostgreSQL è supportato per le funzionalità seguenti:

Funzionalità supportate IR Endpoint privato gestito
Attività di copia (origine/sink) ① ②
Flusso di dati di mapping (origine/sink)
Attività Lookup ① ②

(1) Runtime di integrazione di Azure (2) Runtime di integrazione self-hosted

Le tre attività funzionano su tutte le opzioni di distribuzione Database di Azure per PostgreSQL:

Introduzione

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

Creare un servizio collegato per Database di Azure per PostgreSQL usando l'interfaccia utente

Usare la procedura seguente per creare un servizio collegato al database di Azure per PostgreSQL nell'interfaccia utente di 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 PostgreSQL e selezionare il connettore database di Azure per PostgreSQL.

    Select the Azure database for PostgreSQL connector.

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

    Configure a linked service to Azure database for PostgreSQL.

Dettagli di configurazione di Connessione or

Le sezioni seguenti offrono informazioni dettagliate sulle proprietà usate per definire entità di Data Factory specifiche per Database di Azure per PostgreSQL connettore.

Proprietà del servizio collegato

Per il servizio collegato Database di Azure per PostgreSQL sono supportate le proprietà seguenti:

Proprietà Descrizione Richiesto
Tipo La proprietà type deve essere impostata su AzurePostgreSql.
connectionString Stringa di connessione ODBC per la connessione al Database di Azure per PostgreSQL.
È anche possibile inserire una password in Azure Key Vault ed estrarre la password configurazione dal stringa di connessione. Per altri dettagli, vedere gli esempi seguenti e Archiviare le credenziali in Azure Key Vault .
connectVia Questa proprietà rappresenta il runtime di integrazione da usare per connettersi all'archivio dati. È possibile usare il runtime di integrazione di Azure o il runtime di integrazione self-hosted (se l'archivio dati si trova in una rete privata). Se non specificato, viene usato il runtime di integrazione di Azure predefinito. No

Una stringa di connessione tipica è Server=<server>.postgres.database.azure.com;Database=<database>;Port=<port>;UID=<username>;Password=<Password>. Ecco altre proprietà che è possibile impostare in base al caso:

Proprietà Descrizione Opzioni Richiesto
EncryptionMethod (EM) Il metodo usato dal driver per crittografare i dati inviati tra il driver e il server di database. Ad esempio, usare EncryptionMethod=<0/1/6>; 0 (Nessuna crittografia) (impostazione predefinita) / 1 (SSL) / 6 (RequestSSL) No
ValidateServerCertificate (VSC) Determina se il driver convalida il certificato inviato dal server di database quando la crittografia SSL è abilitata (Metodo di crittografia=1). Ad esempio, usare ValidateServerCertificate=<0/1>; 0 (disabilitato) (impostazione predefinita) / 1 (abilitato) No

Esempio:

{
    "name": "AzurePostgreSqlLinkedService",
    "properties": {
        "type": "AzurePostgreSql",
        "typeProperties": {
            "connectionString": "Server=<server>.postgres.database.azure.com;Database=<database>;Port=<port>;UID=<username>;Password=<Password>"
        }
    }
}

Esempio:

Archiviare la password in Azure Key Vault

{
    "name": "AzurePostgreSqlLinkedService",
    "properties": {
        "type": "AzurePostgreSql",
        "typeProperties": {
            "connectionString": "Server=<server>.postgres.database.azure.com;Database=<database>;Port=<port>;UID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        }
    }
}

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. In questa sezione viene fornito un elenco di proprietà supportate Database di Azure per PostgreSQL nei set di dati.

Per copiare dati dal Database di Azure per PostgreSQL, impostare la proprietà type del set di dati su AzurePostgreSqlTable. Sono supportate le proprietà seguenti:

Proprietà Descrizione Richiesto
Tipo La proprietà type del set di dati deve essere impostata su AzurePostgreSqlTable
tableName Nome della tabella No (se nell'origine dell'attività è specificato "query")

Esempio:

{
    "name": "AzurePostgreSqlDataset",
    "properties": {
        "type": "AzurePostgreSqlTable",
        "linkedServiceName": {
            "referenceName": "<AzurePostgreSql linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {}
    }
}

Proprietà dell'attività di copia

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, vedere Pipeline e attività. In questa sezione viene fornito un elenco delle proprietà supportate da un'origine Database di Azure per PostgreSQL.

Database di Azure per PostgreSQL come origine

Per copiare i dati da un Database di Azure per PostgreSQL, impostare il tipo di origine nell'attività di copia su AzurePostgreSqlSource. Nella sezione origine dell'attività di copia sono supportate le proprietà seguenti:

Proprietà Descrizione Richiesto
Tipo La proprietà type dell'origine dell'attività di copia deve essere impostata su AzurePostgreSqlSource
query Usare la query SQL personalizzata per leggere i dati. Ad esempio, SELECT * FROM mytable o SELECT * FROM "MyTable". Nota in PostgreSQL, il nome dell'entità viene considerato senza distinzione tra maiuscole e minuscole se non racchiuso tra virgolette. No (se viene specificata la proprietà tableName nel set di dati)
partitionOptions Specifica le opzioni di partizionamento dei dati utilizzate per caricare dati da database SQL di Azure.
I valori consentiti sono: Nessuno (impostazione predefinita), PhysicalPartitionsOfTable e DynamicRange.
Quando un'opzione di partizione è abilitata ( ovvero , non None), il grado di parallelismo per caricare simultaneamente i dati da un database SQL di Azure è controllato dall'impostazione nell'attività parallelCopies di copia.
No
partitionSettings Specifica il gruppo di impostazioni per il partizionamento dei dati.
Applicare quando l'opzione di partizione non Noneè .
No
In partitionSettings:
partitionNames Elenco di partizioni fisiche da copiare.
Si applica quando l'opzione di partizione è PhysicalPartitionsOfTable. Se si usa una query per recuperare i dati di origine, associare ?AdfTabularPartitionName nella clausola WHERE. Per un esempio, vedere la sezione Copia parallela da Database di Azure per PostgreSQL.
No
partitionColumnName Specificare il nome della colonna di origine nel tipo integer o date/datetime (int, smallint, datebigint, timestamp without time zone, timestamp with time zone o time without time zone) che verrà usato dal partizionamento dell'intervallo per la copia parallela. Se non specificato, la chiave primaria della tabella viene rilevata automaticamente e usata come colonna di partizione.
Si applica quando l'opzione di partizione è DynamicRange. Se si usa una query per recuperare i dati di origine, associare ?AdfRangePartitionColumnName nella clausola WHERE. Per un esempio, vedere la sezione Copia parallela da Database di Azure per PostgreSQL.
No
partitionUpperBound Valore massimo della colonna della partizione per copiare i dati.
Si applica quando l'opzione di partizione è DynamicRange. Se si usa una query per recuperare i dati di origine, associare ?AdfRangePartitionUpbound nella clausola WHERE. Per un esempio, vedere la sezione Copia parallela da Database di Azure per PostgreSQL.
No
partitionLowerBound Valore minimo della colonna di partizione da copiare.
Si applica quando l'opzione di partizione è DynamicRange. Se si usa una query per recuperare i dati di origine, associare ?AdfRangePartitionLowbound nella clausola WHERE. Per un esempio, vedere la sezione Copia parallela da Database di Azure per PostgreSQL.
No

Esempio:

"activities":[
    {
        "name": "CopyFromAzurePostgreSql",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<AzurePostgreSql input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzurePostgreSqlSource",
                "query": "<custom query e.g. SELECT * FROM mytable>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Database di Azure per PostgreSQL come sink

Per copiare i dati in Database di Azure per PostgreSQL, nella sezione sink dell'attività di copia sono supportate le proprietà seguenti:

Proprietà Descrizione Richiesto
Tipo La proprietà type del sink dell'attività di copia deve essere impostata su AzurePostgreSQLSink.
preCopyScript Specificare una query SQL per l'attività di copia da eseguire prima di scrivere i dati in Database di Azure per PostgreSQL in ogni esecuzione. È possibile usare questa proprietà per pulire i dati precaricati. No
writeMethod Metodo utilizzato per scrivere dati in Database di Azure per PostgreSQL.
I valori consentiti sono: CopyCommand (impostazione predefinita, che è più efficiente), BulkInsert.
No
writeBatchSize Numero di righe caricate in Database di Azure per PostgreSQL per batch.
Il valore consentito è un numero intero che rappresenta il numero di righe.
No (il valore predefinito è 1.000.000)
writeBatchTimeout Tempo di attesa per l'operazione di inserimento batch da completare prima del timeout.
I valori consentiti sono stringhe Timespan. Ad esempio "00:30:00" (30 minuti).
No (il valore predefinito è 00:30:00)

Esempio:

"activities":[
    {
        "name": "CopyToAzureDatabaseForPostgreSQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure PostgreSQL output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzurePostgreSQLSink",
                "preCopyScript": "<custom SQL script>",
                "writeMethod": "CopyCommand",
                "writeBatchSize": 1000000
            }
        }
    }
]

Copia parallela da Database di Azure per PostgreSQL

Il connettore Database di Azure per PostgreSQL nell'attività di copia fornisce il partizionamento dei dati predefinito per copiare i dati in parallelo. È possibile trovare le opzioni di partizionamento dei dati nella scheda Origine dell'attività di copia.

Screenshot of partition options

Quando si abilita la copia partizionata, l'attività di copia esegue query parallele sull'origine Database di Azure per PostgreSQL per caricare i dati in base alle partizioni. Il grado di parallelismo è controllato dall'impostazione parallelCopies sull'attività di copia. Ad esempio, se si imposta parallelCopies su quattro, il servizio genera e esegue simultaneamente quattro query in base all'opzione e alle impostazioni di partizione specificate e ogni query recupera una parte di dati dal Database di Azure per PostgreSQL.

È consigliabile abilitare la copia parallela con il partizionamento dei dati, soprattutto quando si caricano grandi quantità di dati dal Database di Azure per PostgreSQL. Di seguito sono riportate le configurazioni consigliate per i diversi scenari: Quando si copiano dati in un archivio dati basato su file, è consigliabile scrivere in una cartella come più file (specificare solo il nome della cartella), nel qual caso le prestazioni sono migliori rispetto alla scrittura in un singolo file.

Scenario Impostazioni consigliate
Caricamento completo da tabelle di grandi dimensioni, con partizioni fisiche. Opzione di partizione: partizioni fisiche della tabella.

Durante l'esecuzione, il servizio rileva automaticamente le partizioni fisiche e copia i dati in base alle partizioni.
Caricamento completo da una tabella di grandi dimensioni, senza partizioni fisiche, mentre con una colonna integer per il partizionamento dei dati. Opzioni di partizione: partizione intervallo dinamico.
Colonna di partizione: specificare la colonna usata per partizionare i dati. Se non specificato, viene utilizzata la colonna chiave primaria.
Caricare una grande quantità di dati usando una query personalizzata, con partizioni fisiche. Opzione di partizione: partizioni fisiche della tabella.
Query: SELECT * FROM ?AdfTabularPartitionName WHERE <your_additional_where_clause>.
Nome partizione: specificare i nomi della partizione da cui copiare i dati. Se non specificato, il servizio rileva automaticamente le partizioni fisiche nella tabella specificata nel set di dati PostgreSQL.

Durante l'esecuzione, il servizio sostituisce ?AdfTabularPartitionName con il nome effettivo della partizione e invia a Database di Azure per PostgreSQL.
Caricare una grande quantità di dati usando una query personalizzata, senza partizioni fisiche, mentre con una colonna integer per il partizionamento dei dati. Opzioni di partizione: partizione intervallo dinamico.
Query: SELECT * FROM ?AdfTabularPartitionName WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>.
Colonna di partizione: specificare la colonna usata per partizionare i dati. È possibile eseguire la partizione rispetto alla colonna con tipo di dati integer o date/datetime.
Limite superiore della partizione e limite inferiore della partizione: specificare se si desidera filtrare in base alla colonna di partizione per recuperare i dati solo tra l'intervallo inferiore e quello superiore.

Durante l'esecuzione, il servizio sostituisce ?AdfRangePartitionColumnName, ?AdfRangePartitionUpbounde ?AdfRangePartitionLowbound con il nome di colonna e gli intervalli di valori effettivi per ogni partizione e invia a Database di Azure per PostgreSQL.
Ad esempio, se la colonna di partizione "ID" è impostata con il limite inferiore su 1 e il limite superiore come 80, con copia parallela impostata su 4, il servizio recupera i dati per 4 partizioni. Gli ID sono rispettivamente compresi tra [1, 20], [21, 40], [41, 60] e [61, 80].

Procedure consigliate per caricare i dati con l'opzione di partizione:

  1. Scegliere una colonna distintiva come colonna di partizione (ad esempio chiave primaria o chiave univoca) per evitare l'asimmetria dei dati.
  2. Se la tabella include una partizione predefinita, usare l'opzione di partizione "Partizioni fisiche della tabella" per ottenere prestazioni migliori.
  3. Se si usa Azure Integration Runtime per copiare i dati, è possibile impostare unità di Integrazione dei dati (DIU) di dimensioni maggiori (>4) per usare più risorse di calcolo. Controllare gli scenari applicabili.
  4. "Grado di parallelismo di copia" controlla i numeri di partizione, impostando questo numero troppo grande a volte le prestazioni, è consigliabile impostare questo numero come (DIU o numero di nodi del runtime di integrazione self-hosted) * (da 2 a 4).

Esempio: caricamento completo da una tabella di grandi dimensioni con partizioni fisiche

"source": {
    "type": "AzurePostgreSqlSource",
    "partitionOption": "PhysicalPartitionsOfTable"
}

Esempio: query con partizione a intervalli dinamici

"source": {
    "type": "AzurePostgreSqlSource",
    "query": "SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>",
    "partitionOption": "DynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<partition_column_name>",
        "partitionUpperBound": "<upper_value_of_partition_column (optional) to decide the partition stride, not as data filter>",
        "partitionLowerBound": "<lower_value_of_partition_column (optional) to decide the partition stride, not as data filter>"
    }
}

Proprietà del flusso di dati per mapping

Quando si trasformano i dati nel flusso di dati di mapping, è possibile leggere e scrivere nelle tabelle da Database di Azure per PostgreSQL. Per altre informazioni, vedere la trasformazione origine e la trasformazione sink nei flussi di dati per mapping. È possibile scegliere di usare un set di dati Database di Azure per PostgreSQL o un set di dati inline come tipo di origine e sink.

Trasformazione origine

Nella tabella seguente sono elencate le proprietà supportate da Database di Azure per PostgreSQL'origine. È possibile modificare queste proprietà nella scheda Opzioni origine.

Name Descrizione Richiesto Valori consentiti Proprietà script flusso di dati
Tabella Se si seleziona Tabella come input, il flusso di dati recupera tutti i dati dalla tabella specificata nel set di dati. No - (solo per set di dati inline)
tableName
Query Se si seleziona Query come input, specificare una query SQL per recuperare i dati dall'origine, che esegue l'override di qualsiasi tabella specificata nel set di dati. L'uso delle query è un ottimo modo per ridurre le righe per i test o le ricerche.

La clausola Order By non è supportata, ma è possibile impostare un'istruzione FROM edizione Standard LECT completa. È possibile usare anche funzioni di tabella definite dall'utente. select * from udfGetData() è una funzione definita dall'utente in SQL che restituisce una tabella che è possibile usare nel flusso di dati.
Esempio di query: select * from mytable where customerId > 1000 and customerId < 2000 o select * from "MyTable". Nota in PostgreSQL, il nome dell'entità viene considerato senza distinzione tra maiuscole e minuscole se non racchiuso tra virgolette.
No Stringa query
Nome schema Se si seleziona Stored procedure come input, specificare un nome di schema della stored procedure oppure selezionare Aggiorna per chiedere al servizio di individuare i nomi dello schema. No Stringa schemaName
Stored procedure Se si seleziona Stored procedure come input, specificare un nome della stored procedure per leggere i dati dalla tabella di origine oppure selezionare Aggiorna per chiedere al servizio di individuare i nomi delle procedure. Sì (se si seleziona Stored procedure come input) Stringa procedureName
Parametri delle procedure Se si seleziona Stored procedure come input, specificare i parametri di input per la stored procedure nell'ordine impostato nella routine oppure selezionare Importa per importare tutti i parametri di routine usando il formato @paraName. No Matrice input
Dimensioni dei batch Specificare una dimensione batch per suddividere dati di grandi dimensioni in batch. No Integer batchSize
Livello di isolamento Scegliere uno dei livelli di isolamento seguenti:
- Read Committed
- Read Uncommitted (impostazione predefinita)
- Lettura ripetibile
-Serializzabile
- Nessuno (ignora il livello di isolamento)
No READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZABLE
NONE
isolationLevel

Esempio di script di origine Database di Azure per PostgreSQL

Quando si usa Database di Azure per PostgreSQL come tipo di origine, lo script del flusso di dati associato è:

source(allowSchemaDrift: true,
    validateSchema: false,
    isolationLevel: 'READ_UNCOMMITTED',
    query: 'select * from mytable',
    format: 'query') ~> AzurePostgreSQLSource

Trasformazione sink

Nella tabella seguente sono elencate le proprietà supportate da Database di Azure per PostgreSQL sink. È possibile modificare queste proprietà nella scheda Opzioni sink.

Name Descrizione Richiesto Valori consentiti Proprietà script flusso di dati
Metodo di aggiornamento Specificare le operazioni consentite nella destinazione del database. Per impostazione predefinita, sono consentiti solo gli inserimenti.
Per aggiornare, upsert o eliminare righe, è necessaria una trasformazione Alter row per contrassegnare le righe per tali azioni.
true o false deletable
Inseribile
Aggiornabile
aggiornabile
Colonne chiave Per gli aggiornamenti, gli upsert e le eliminazioni, le colonne chiave devono essere impostate per determinare quale riga modificare.
Il nome della colonna selezionato come chiave verrà usato come parte dell'aggiornamento successivo, dell'upsert, dell'eliminazione. Pertanto, è necessario selezionare una colonna esistente nel mapping sink.
No Matrice keys
Ignora scrittura colonne chiave Se si desidera non scrivere il valore nella colonna chiave, selezionare "Ignora la scrittura di colonne chiave". No true o false skipKeyWrites
azione Tabella determina se ricreare o rimuovere tutte le righe dalla tabella di destinazione prima della scrittura.
- Nessuno: nessuna azione verrà eseguita nella tabella.
- Ricrea: la tabella verrà eliminata e ricreata. Questa opzione è obbligatoria se si crea una nuova tabella in modo dinamico.
- Troncamento: tutte le righe della tabella di destinazione verranno rimosse.
No true o false Ricreare
truncate
Dimensioni dei batch Specificare il numero di righe scritte in ogni batch. Dimensioni batch più grandi migliorano l'ottimizzazione della compressione e della memoria, ma rischiano di causare eccezioni di memoria insufficiente durante la memorizzazione nella cache dei dati. No Integer batchSize
Selezionare lo schema del database utente Per impostazione predefinita, una tabella temporanea verrà creata nello schema sink come staging. In alternativa, è possibile deselezionare l'opzione Usa schema sink e specificare invece un nome di schema in cui Data Factory creerà una tabella di staging per caricare i dati upstream e pulirli automaticamente al termine. Assicurarsi di disporre dell'autorizzazione create table nel database e di modificare l'autorizzazione per lo schema. No Stringa stagingSchemaName
Pre e post-script SQL Specificare script SQL su più righe che verranno eseguiti prima (pre-elaborazione) e dopo la scrittura dei dati (post-elaborazione) nel database Sink. No Stringa preSQLs
postSQLs

Suggerimento

  1. È consigliabile suddividere singoli script batch con più comandi in più batch.
  2. Possono essere eseguite come parte di un batch solo le istruzioni DDL (Data Definition Language) e DML (Data Manipulation Language) che restituiscono un semplice conteggio di aggiornamento. Per altre informazioni, vedere Esecuzione di operazioni batch
  • Abilita estrazione incrementale: usare questa opzione per indicare a Azure Data Factory di elaborare solo le righe modificate dall'ultima esecuzione della pipeline.

  • Colonna incrementale: quando si usa la funzionalità di estrazione incrementale, è necessario scegliere la colonna data/ora o numerica da usare come filigrana nella tabella di origine.

  • Iniziare a leggere dall'inizio: l'impostazione di questa opzione con l'estrazione incrementale indicherà ad ADF di leggere tutte le righe alla prima esecuzione di una pipeline con l'estrazione incrementale attivata.

Esempio di script sink Database di Azure per PostgreSQL

Quando si usa Database di Azure per PostgreSQL come tipo di sink, lo script del flusso di dati associato è:

IncomingStream sink(allowSchemaDrift: true,
    validateSchema: false,
    deletable:false,
    insertable:true,
    updateable:true,
    upsertable:true,
    keys:['keyColumn'],
    format: 'table',
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> AzurePostgreSQLSink

Proprietà dell'attività Lookup

Per altre informazioni sulle proprietà, vedere Attività di ricerca.

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