Copiare dati da PostgreSQL tramite 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 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à di copia nelle pipeline di Azure Data Factory e Synapse Analytics per copiare dati da un database PostgreSQL. Si basa sull'articolo di panoramica dell'attività di copia che presenta una panoramica generale sull'attività di copia.
Importante
Il nuovo connettore PostgreSQL offre un supporto postgreSQL nativo migliorato. Se si usa il connettore PostgreSQL legacy nella soluzione, aggiornare il connettore PostgreSQL prima del 31 ottobre 2024. Per informazioni dettagliate sulla differenza tra la versione legacy e quella più recente, vedere questa sezione.
Funzionalità supportate
Questo connettore PostgreSQL è supportato per le funzionalità seguenti:
Funzionalità supportate | IR |
---|---|
Attività Copy (origine/-) | ① ② |
Attività Lookup | ① ② |
① Azure Integration Runtime ② Runtime di integrazione self-hosted
Per un elenco degli archivi dati supportati come origini/sink dall'attività di copia, vedere la tabella relativa agli archivi dati supportati.
In particolare, questo connettore PostgreSQL supporta la versione 7.4 e le versioni successive di PostgreSQL.
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 PostgreSQL predefinito a partire dalla versione 3.7 e non è quindi necessario installare manualmente alcun driver.
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 PostgreSQL usando l'interfaccia utente
Usare la procedura seguente per creare un servizio collegato a PostgreSQL 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 Postgre e selezionare il connettore PostgreSQL.
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 PostgreSQL.
Proprietà del servizio collegato
Per il servizio collegato di PostgreSQL sono supportate le proprietà seguenti:
Proprietà | Descrizione | Richiesto |
---|---|---|
type | La proprietà type deve essere impostata su: PostgreSqlV2 | Sì |
server | Specifica il nome host e, facoltativamente, la porta in cui è in esecuzione PostgreSQL. | Sì |
port | Porta TCP del server PostgreSQL. | No |
database | Database PostgreSQL a cui connettersi. | Sì |
username | Nome utente con cui connettersi. Non obbligatorio se si usa IntegratedSecurity. | Sì |
password | Password con cui connettersi. Non obbligatorio se si usa IntegratedSecurity. | Sì |
sslMode | Controlla se viene usato SSL, a seconda del supporto del server. - Disabilita: SSL è disabilitato. Se il server richiede SSL, la connessione avrà esito negativo. - Consenti: preferisce le connessioni non SSL se il server le consente, ma consente le connessioni SSL. - Preferenza: preferisce le connessioni SSL se il server le consente, ma consente le connessioni senza SSL. - Richiedi: non eseguire la connessione se il server non supporta SSL. - Verifica CA: non eseguire la connessione se il server non supporta SSL. Verifica anche il certificato del server. - Verifica completa: non eseguire la connessione se il server non supporta SSL. Verifica anche il certificato del server con il nome dell'host. Opzioni: Disabilita (0) / Consenti (1) / Preferisci (2) (impostazione predefinita) / Richiedi (3) / Verify-ca (4) / Verify-full (5) |
No |
authenticationType | Tipo di autenticazione per la connessione al database. Supporta solo Basic. | Sì |
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 |
Proprietà di connessione aggiuntive: | ||
schema | Imposta il percorso di ricerca dello schema. | No |
pooling | Indica se usare il pool di connessioni. | No |
connectionTimeout | Tempo di attesa (in secondi) durante il tentativo di stabilire una connessione prima di terminare il tentativo e generare un errore. | No |
commandTimeout | Tempo di attesa (in secondi) durante il tentativo di esecuzione di un comando prima di terminare il tentativo e generare un errore. Impostare su zero per infinito. | No |
trustServerCertificate | Se considerare attendibile il certificato del server senza convalidarlo. | No |
sslCertificate | Percorso di un certificato client da inviare al server. | No |
sslKey | Posizione di una chiave client per l'invio di un certificato client al server. | No |
sslPassword | Password per una chiave per un certificato client. | No |
readBufferSize | Determina le dimensioni del buffer interno usato da Npgsql durante la lettura. L'aumento può migliorare le prestazioni se si trasferiscono valori di grandi dimensioni dal database. | No |
logParameters | Se abilitata, i valori dei parametri vengono registrati quando vengono eseguiti i comandi. | No |
timezone | Ottiene o imposta il fuso orario della sessione. | No |
codifica | Ottiene o imposta la codifica .NET che verrà usata per codificare/decodificare i dati della stringa PostgreSQL. | No |
Nota
Per avere la verifica SSL completa tramite la connessione ODBC quando si usa Self Hosted Integration Runtime, è necessario usare una connessione di tipo ODBC anziché il connettore PostgreSQL in modo esplicito e completare la configurazione seguente:
- Configurare il DSN in qualsiasi server SHIR.
- Inserire il certificato appropriato per PostgreSQL in C:\Windows\ServiceProfiles\DIAHostService\AppData\Roaming\postgresql\root.crt nei server SHIR. In questo caso, il driver ODBC cerca > il certificato SSL da verificare quando si connette al database.
- Nella connessione data factory usare una connessione di tipo ODBC con la stringa di connessione che punta al DSN creato nei server SHIR.
Esempio:
{
"name": "PostgreSqlLinkedService",
"properties": {
"type": "PostgreSqlV2",
"typeProperties": {
"server": "<server>",
"port": 5432,
"database": "<database>",
"username": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"sslmode": <sslmode>,
"authenticationType": "Basic"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Esempio: archiviare la password in Azure Key Vault
{
"name": "PostgreSqlLinkedService",
"properties": {
"type": "PostgreSqlV2",
"typeProperties": {
"server": "<server>",
"port": 5432,
"database": "<database>",
"username": "<username>",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
"sslmode": <sslmode>,
"authenticationType": "Basic"
},
"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 di set di dati, vedere l'articolo sui set di dati. Questa sezione presenta un elenco delle proprietà supportate dal set di dati di PostgreSQL.
Per copiare dati da PostgreSQL, sono supportate le proprietà seguenti:
Proprietà | Descrizione | Richiesto |
---|---|---|
type | La proprietà type del set di dati deve essere impostata su: PostgreSqlV2Table | Sì |
schema | Nome dello schema. | No (se nell'origine dell'attività è specificato "query") |
table | Nome della tabella. | No (se nell'origine dell'attività è specificato "query") |
Esempio
{
"name": "PostgreSQLDataset",
"properties":
{
"type": "PostgreSqlV2Table",
"linkedServiceName": {
"referenceName": "<PostgreSQL linked service name>",
"type": "LinkedServiceReference"
},
"annotations": [],
"schema": [],
"typeProperties": {
"schema": "<schema name>",
"table": "<table name>"
}
}
}
Il set di dati tipizzato RelationalTable
è ancora supportato senza modifiche, ma è consigliato l'uso del nuovo per il futuro.
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 PostgreSQL.
PostgreSQL come origine
Per copiare dati da PostgreSQL, 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: PostgreSqlV2Source | Sì |
query | Usare la query SQL personalizzata per leggere i dati. Ad esempio: "query": "SELECT * FROM \"MySchema\".\"MyTable\"" . |
No (se nel set di dati è specificato "tableName") |
Nota
I nomi di schemi e tabelle fanno distinzione tra maiuscole e minuscole. Racchiudere i nomi tra ""
(virgolette doppie) nella query.
Esempio:
"activities":[
{
"name": "CopyFromPostgreSQL",
"type": "Copy",
"inputs": [
{
"referenceName": "<PostgreSQL input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "PostgreSqlV2Source",
"query": "SELECT * FROM \"MySchema\".\"MyTable\""
},
"sink": {
"type": "<sink type>"
}
}
}
]
L'origine tipizzata RelationalSource
è ancora supportata senza modifiche, ma è consigliato l'uso della nuova per il futuro.
Mapping dei tipi di dati per PostgreSQL
Quando si copiano dati da PostgreSQL, i mapping seguenti vengono usati dai tipi di dati PostgreSQL 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 PostgreSQL | Tipo di dati del servizio provvisorio | Tipo di dati del servizio provvisorio per PostgreSQL (legacy) |
---|---|---|
SmallInt |
Int16 |
Int16 |
Integer |
Int32 |
Int32 |
BigInt |
Int64 |
Int64 |
Decimal (Precisione <= 28) |
Decimal |
Decimal |
Decimal (Precisione > 28) |
Non supportato | String |
Numeric |
Decimal |
Decimal |
Real |
Single |
Single |
Double |
Double |
Double |
SmallSerial |
Int16 |
Int16 |
Serial |
Int32 |
Int32 |
BigSerial |
Int64 |
Int64 |
Money |
Decimal |
String |
Char |
String |
String |
Varchar |
String |
String |
Text |
String |
String |
Bytea |
Byte[] |
Byte[] |
Timestamp |
DateTime |
DateTime |
Timestamp with time zone |
DateTime |
String |
Date |
DateTime |
DateTime |
Time |
TimeSpan |
TimeSpan |
Time with time zone |
DateTimeOffset |
String |
Interval |
TimeSpan |
String |
Boolean |
Boolean |
Boolean |
Point |
String |
String |
Line |
String |
String |
Iseg |
String |
String |
Box |
String |
String |
Path |
String |
String |
Polygon |
String |
String |
Circle |
String |
String |
Cidr |
String |
String |
Inet |
String |
String |
Macaddr |
String |
String |
Macaddr8 |
String |
String |
Tsvector |
String |
String |
Tsquery |
String |
String |
UUID |
Guid |
Guid |
Json |
String |
String |
Jsonb |
String |
String |
Array |
String |
String |
Bit |
Byte[] |
Byte[] |
Bit varying |
Byte[] |
Byte[] |
XML |
String |
String |
IntArray |
String |
String |
TextArray |
String |
String |
NumbericArray |
String |
String |
DateArray |
String |
String |
Range |
String |
String |
Bpchar |
String |
String |
Proprietà dell'attività Lookup
Per altre informazioni sulle proprietà, vedere Attività Lookup.
Aggiornare il servizio collegato PostgreSQL
Ecco i passaggi che consentono di aggiornare il servizio collegato PostgreSQL:
Creare un nuovo servizio collegato PostgreSQL e configurarlo facendo riferimento alle Proprietà del servizio collegato.
Il mapping dei tipi di dati per il servizio collegato PostgreSQL più recente è diverso da quello per la versione legacy. Per informazioni sul mapping dei tipi di dati più recente, vedere Mapping dei tipi di dati per PostgreSQL.
Differenze tra PostgreSQL e PostgreSQL (legacy)
La tabella seguente illustra le differenze di mapping dei tipi di dati tra PostgreSQL e PostgreSQL (legacy).
Tipo di dati di PostgreSQL | Tipo di dati del servizio provvisorio per PostgreSQL | Tipo di dati del servizio provvisorio per PostgreSQL (legacy) |
---|---|---|
Moneta | Decimale | String |
Timestamp con fuso orario | Data/Ora | String |
Ora con fuso orario | DateTimeOffset | String |
Intervallo | TimeSpan | String |
BigDecimal | Non supportato. In alternativa, usare la funzione to_char() per convertire BigDecimal in String. |
String |
Contenuto correlato
Per un elenco degli archivi dati supportati come origini e sink dall'attività Copy, vedere Archivi dati supportati.