Strategie di caricamento dei dati per pool SQL dedicati in Azure Synapse Analytics

I pool SQL dedicati SMP tradizionali usano un processo ETL (Extract, Transform e Load) per il caricamento dei dati. Synapse SQL, all'interno di Azure Synapse Analytics, usa l'architettura di elaborazione query distribuita che sfrutta la scalabilità e la flessibilità delle risorse di calcolo e archiviazione.

L'uso di un processo ELT (Extract, Load and Transform) sfrutta le funzionalità di elaborazione di query distribuite predefinite ed elimina le risorse necessarie per la trasformazione dei dati prima del caricamento.

Anche se i pool SQL dedicati supportano molti metodi di caricamento, incluse le opzioni di SQL Server comuni, ad esempio bcp e l'API SqlBulkCopy, il modo più veloce e scalabile per caricare i dati è tramite tabelle esterne PolyBase e l'istruzione COPY.

Con PolyBase e l'istruzione COPY, è possibile accedere ai dati archiviati esterni in Archiviazione BLOB di Azure o Azure Data Lake Store tramite il linguaggio T-SQL. Per la massima flessibilità durante il caricamento, è consigliabile usare l'istruzione COPY.

Definizione di ELT

L'estrazione, il carico e la trasformazione (ELT) è un processo in base al quale i dati vengono estratti da un sistema di origine, caricati in un pool SQL dedicato e quindi trasformati.

I passaggi di base per l'implementazione del processo ELT sono:

  1. Estrarre i dati di origine in file di testo.
  2. Trasferire i dati nell'archivio BLOB di Azure o in Azure Data Lake Store.
  3. Preparare i dati per il caricamento.
  4. Caricare i dati nelle tabelle di staging con PolyBase o il comando COPY.
  5. Trasformare i dati.
  6. Inserire i dati in tabelle di produzione.

Per un'esercitazione sul caricamento, vedere Caricamento dei dati dall'archiviazione BLOB di Azure.

1. Estrarre i dati di origine in file di testo

La modalità di recupero dei dati dal sistema di origine dipende dalla posizione di archiviazione. L'obiettivo è spostare i dati in file di testo delimitati o CSV supportati.

Formati di file supportati

Con PolyBase e l'istruzione COPY, è possibile caricare dati da file di testo o CSV delimitati con codifica UTF-8 e UTF-16. Oltre ai file di testo o CSV delimitati, è supportato il caricamento da formati di file Hadoop come ORC e Parquet. PolyBase e l'istruzione COPY possono anche caricare dati da file compressi Gzip e Snappy.

I formati ASCII esteso, a larghezza fissa e annidati, come WinZip o XML, non sono attualmente supportati. Se si esegue l'esportazione da SQL Server, è possibile usare lo strumento da riga di comando bcp per esportare i dati in file di testo delimitati.

2. Trasferire i dati in Archiviazione BLOB di Azure o in Azure Data Lake Store

Per trasferire i dati in Archiviazione di Azure, è possibile spostarli nell'archivio BLOB di Azure o in Azure Data Lake Store Gen2. In entrambe le posizioni, i dati devono essere archiviati in file di testo. PolyBase e l'istruzione COPY supportano il caricamento da entrambe le posizioni.

Strumenti e servizi che è possibile usare per spostare i dati in Archiviazione di Azure:

  • Il servizio Azure ExpressRoute migliora la velocità effettiva della rete, le prestazioni e la prevedibilità. ExpressRoute è un servizio che instrada i dati tramite una connessione privata dedicata ad Azure. Le connessioni ExpressRoute non instradano i dati attraverso la rete Internet pubblica. Queste connessioni offrono maggiore affidabilità, velocità più elevate, latenze minori e sicurezza superiore rispetto alle tipiche connessioni tramite la rete Internet pubblica.
  • L'utilità AzCopy sposta i dati in Archiviazione di Azure su Internet pubblico. Si tratta di un'opzione appropriata se le dimensioni dei dati sono inferiori a 10 TB. Per eseguire carichi regolarmente con AzCopy, testare la velocità di rete per verificare se è accettabile.
  • Azure Data Factory (ADF) include un gateway che è possibile installare nel server locale. È quindi possibile creare una pipeline per spostare i dati dal server locale ad Archiviazione di Azure. Per usare Data Factory con pool SQL dedicati, vedere Caricamento di dati per pool SQL dedicati.

3. Preparare i dati per il caricamento

Potrebbe essere necessario preparare e pulire i dati nell'account di archiviazione prima del caricamento. La preparazione dei dati può essere eseguita nella posizione di origine dei dati, mentre si esportano i dati in file di testo o quando i dati raggiungono Archiviazione di Azure. È più facile lavorare con i dati il prima possibile nel processo.

Definire le tabelle

È prima necessario definire le tabelle da caricare nel pool SQL dedicato quando si usa l'istruzione COPY.

Se si usa PolyBase, è necessario definire tabelle esterne nel pool SQL dedicato prima del caricamento. PolyBase usa le tabelle esterne per definire i dati e accedervi in Archiviazione di Azure. Una tabella esterna è simile a una vista di database. La tabella esterna contiene lo schema della tabella e punta ai dati archiviati all'esterno del pool SQL dedicato.

La definizione di tabelle esterne include la specifica dell'origine dati, del formato dei file di testo e delle definizioni delle tabelle. Gli articoli di riferimento per la sintassi T-SQL che saranno necessari sono:

Usare il mapping del tipo di dati SQL seguente durante il caricamento di file Parquet:

Tipo Parquet Tipo logico Parquet (annotazione) Tipo di dati SQL
BOOLEAN bit
BINARY/BYTE_ARRAY varbinary
DOUBLE float
FLOAT real
INT32 INT
INT64 bigint
INT96 datetime2
FIXED_LEN_BYTE_ARRAY BINARY
BINARY UTF8 NVARCHAR
BINARY STRING NVARCHAR
BINARY ENUM NVARCHAR
BINARY UUID UNIQUEIDENTIFIER
BINARY DECIMAL decimal
BINARY JSON nvarchar(MAX)
BINARY BSON varbinary(max)
FIXED_LEN_BYTE_ARRAY DECIMAL decimal
BYTE_ARRAY INTERVAL varchar(max),
INT32 INT(8, true) SMALLINT
INT32 INT(16, true) SMALLINT
INT32 INT(32, true) INT
INT32 INT(8, false) TINYINT
INT32 INT(16, false) INT
INT32 INT(32, false) bigint
INT32 DATE Data
INT32 DECIMAL decimal
INT32 TIME (MILLIS) time
INT64 INT(64, true) bigint
INT64 INT(64, false) decimal(20,0)
INT64 DECIMAL decimal
INT64 TIME (MILLIS) time
INT64 TIMESTAMP (MILLIS) datetime2
Tipo complesso INSERZIONE ntext
Tipo complesso MAP ntext

Importante

  • I pool SQL dedicati attualmente non supportano tipi di dati Parquet con precisione MICROS e NANOS.
  • È possibile che si verifichi l'errore seguente se i tipi non corrispondono tra Parquet e SQL o se sono presenti tipi di dati Parquet non supportati: HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: ClassCastException:...
  • Il caricamento di un valore non compreso nell'intervallo compreso tra 0 e 127 in una colonna tinyint per il formato di file Parquet e ORC non è supportato.

Per un esempio di creazione di oggetti esterni, vedere Creare tabelle esterne.

Formattare i file di testo

Se si usa PolyBase, per gli oggetti esterni definiti è necessario allineare le righe dei file di testo alla definizione della tabella esterna e del formato del file. I dati in ogni riga del file di testo devono essere allineati alla definizione della tabella. Per formattare i file di testo:

  • Se i dati provengono da un'origine non relazionale, è necessario trasformarli in righe e colonne. Sia che i dati provengano da un'origine relazionale o non relazionale, devono essere trasformati per allinearli alle definizioni di colonna per la tabella in cui si prevede di caricare i dati.
  • Formattare i dati nel file di testo per allinearli alle colonne e ai tipi di dati nella tabella di destinazione. Il disallineamento tra i tipi di dati nei file di testo esterni e la tabella del pool SQL dedicato causa il rifiuto delle righe durante il caricamento.
  • Separare i campi nel file di testo con un carattere di terminazione. Assicurarsi di usare un carattere o una sequenza di caratteri non inclusi nei dati di origine. Usare il carattere di terminazione specificato con CREATE EXTERNAL FILE FORMAT.

4. Caricare i dati usando PolyBase o l'istruzione COPY

È consigliabile caricare i dati in una tabella di staging. Le tabelle di staging consentono di gestire gli errori senza interferire con le tabelle di produzione. Una tabella di staging offre anche la possibilità di usare l'architettura di elaborazione parallela del pool SQL dedicato per le trasformazioni dei dati prima di inserire i dati nelle tabelle di produzione.

Opzioni per il caricamento

Per caricare i dati, è possibile usare una di queste opzioni di caricamento:

  • L'istruzione COPY è l'utilità di caricamento consigliata perché consente di caricare i dati in modo flessibile e senza problemi. L'istruzione include molte funzionalità di caricamento aggiuntive che PolyBase non fornisce. Vedere l'esercitazione NY taxi cab COPY per eseguire un'esercitazione di esempio.
  • PolyBase con T-SQL richiede la definizione di oggetti dati esterni.
  • PolyBase e istruzione COPY con Azure Data Factory (ADF) è un altro strumento di orchestrazione, che definisce una pipeline e pianifica i processi.
  • PolyBase con SSIS funziona correttamente quando i dati di origine si trovano in SQL Server. SSIS definisce i mapping delle tabelle di origine e di destinazione, oltre a orchestrare il caricamento. Se sono già disponibili pacchetti SSIS, è possibile modificarli per utilizzare la nuova destinazione di data warehouse.
  • PolyBase con Azure Databricks trasferisce i dati da una tabella in un dataframe di Databricks e/o scrive i dati da un dataframe di Databricks in una tabella usando PolyBase.

Altre opzioni di caricamento

Oltre a PolyBase e all'istruzione COPY, è possibile usare bcp o l'API SqlBulkCopy. bcp carica direttamente i dati nel database senza dover passare attraverso l'archivio BLOB di Azure ed è destinato esclusivamente a piccoli caricamenti.

Nota

Le prestazioni di caricamento di queste opzioni sono inferiori rispetto a PolyBase e all'istruzione COPY.

5. Trasformare i dati

Mentre i dati sono nella tabella di staging, eseguire le trasformazioni richieste dal carico di lavoro, quindi spostare i dati in una tabella di produzione.

6. Inserire i dati in tabelle di produzione

L'istruzione INSERT INTO... SELECT sposta i dati dalla tabella di staging alla tabella permanente.

Quando si progetta un processo ETL, provare a eseguire il processo su un campione di test di piccole dimensioni. Provare a estrarre 1000 righe dalla tabella in un file, spostarlo in Azure e quindi provare a caricarlo in una tabella di staging.

Soluzioni di caricamento dei partner

Molti partner Microsoft dispongono di soluzioni di caricamento. Per altre informazioni, vedere l'elenco dei partner che offrono soluzioni.

Passaggi successivi

Per indicazioni sul caricamento, vedere Procedure consigliate per il caricamento dei dati.