Condividi tramite


Caricare dati da Azure Data Lake Storage in pool SQL dedicati in Azure Synapse Analytics

Questa guida illustra come usare l'istruzione COPY per caricare dati da Azure Data Lake Storage. Per esempi rapidi sull'uso dell'istruzione COPY in tutti i metodi di autenticazione, vedere la documentazione seguente: Caricare i dati in modo sicuro usando pool SQL dedicati.

Nota

Per fornire feedback o segnalare problemi sull'istruzione COPY, inviare un messaggio di posta elettronica alla lista di distribuzione sqldwcopypreview@service.microsoft.com.

  • Creare la tabella di destinazione per caricare i dati da Azure Data Lake Storage.
  • Creare l'istruzione COPY per caricare i dati nel data warehouse.

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Operazioni preliminari

Prima di iniziare questa esercitazione, scaricare e installare la versione più recente di SQL Server Management Studio (SSMS).

Per eseguire questa esercitazione è necessario:

  • Un pool SQL dedicato. Vedere Creare un pool SQL dedicato ed eseguire query sui dati.
  • Un account di Data Lake Storage. Vedere Introduzione ad Azure Data Lake Storage. Per questo account di archiviazione, è necessario configurare o specificare una delle credenziali seguenti da caricare: una chiave dell'account di archiviazione, una chiave di firma di accesso condiviso (SAS), un utente dell'applicazione di Azure Directory o un utente di Microsoft Entra con il ruolo di Azure appropriato per l'account di archiviazione.
  • Attualmente, l'inserimento di dati usando il comando COPY in un account di Archiviazione di Azure che usa la nuova funzionalità di partizionamento del DNS di Archiviazione di Azure genera un errore. Effettuare il provisioning di un account di archiviazione in una sottoscrizione che non usa il partizionamento del DNS per questa esercitazione.

Creare la tabella di destinazione

Connettersi al pool SQL dedicato e creare la tabella di destinazione in cui verrà caricato. In questo esempio viene creata una tabella delle dimensioni del prodotto.

-- A: Create the target table
-- DimProduct
CREATE TABLE [dbo].[DimProduct]
(
    [ProductKey] [int] NOT NULL,
    [ProductLabel] [nvarchar](255) NULL,
    [ProductName] [nvarchar](500) NULL
)
WITH
(
    DISTRIBUTION = HASH([ProductKey]),
    CLUSTERED COLUMNSTORE INDEX
    --HEAP
);

Creare l'istruzione COPY

Connettersi al pool SQL dedicato ed eseguire l'istruzione COPY. Per un elenco completo di esempi, vedere la documentazione seguente: Caricare i dati in modo sicuro usando pool SQL dedicati.

-- B: Create and execute the COPY statement

COPY INTO [dbo].[DimProduct]  
--The column list allows you map, omit, or reorder input file columns to target table columns.  
--You can also specify the default value when there is a NULL value in the file.
--When the column list is not specified, columns will be mapped based on source and target ordinality
(
    ProductKey default -1 1,
    ProductLabel default 'myStringDefaultWhenNull' 2,
    ProductName default 'myStringDefaultWhenNull' 3
)
--The storage account location where you data is staged
FROM 'https://storageaccount.blob.core.windows.net/container/directory/'
WITH  
(
   --CREDENTIAL: Specifies the authentication method and credential access your storage account
   CREDENTIAL = (IDENTITY = '', SECRET = ''),
   --FILE_TYPE: Specifies the file type in your storage account location
   FILE_TYPE = 'CSV',
   --FIELD_TERMINATOR: Marks the end of each field (column) in a delimited text (CSV) file
   FIELDTERMINATOR = '|',
   --ROWTERMINATOR: Marks the end of a record in the file
   ROWTERMINATOR = '0x0A',
   --FIELDQUOTE: Specifies the delimiter for data of type string in a delimited text (CSV) file
   FIELDQUOTE = '',
   ENCODING = 'UTF8',
   DATEFORMAT = 'ymd',
   --MAXERRORS: Maximum number of reject rows allowed in the load before the COPY operation is canceled
   MAXERRORS = 10,
   --ERRORFILE: Specifies the directory where the rejected rows and the corresponding error reason should be written
   ERRORFILE = '/errorsfolder',
) OPTION (LABEL = 'COPY: ADLS tutorial');

Ottimizzare la compressione columnstore

Per impostazione predefinita, le tabelle sono definite come indice columnstore cluster. Al termine di un caricamento, alcune delle righe di dati potrebbero non essere compresse nel columnstore. Esiste una serie di motivi per cui questo può verificarsi. Per altre informazioni, vedere l'articolo Gestire gli indici columnstore.

Per ottimizzare le prestazioni delle query e la compressione columnstore dopo un'operazione di caricamento, ricompilare la tabella per forzare l'indice columnstore per comprimere tutte le righe.


ALTER INDEX ALL ON [dbo].[DimProduct] REBUILD;

Ottimizzare le statistiche

È consigliabile creare statistiche a colonna singola subito dopo un caricamento. Sono disponibili alcune opzioni per le statistiche. Ad esempio, se si creano statistiche a colonna singola su ogni colonna, ricompilare tutte le statistiche potrebbe richiedere molto tempo. Se si sa che alcune colonne non si aggiungeranno ai predicati di query, è possibile ignorare la creazione delle statistiche su tali colonne.

Per creare statistiche a colonna singola su ogni colonna di ogni tabella, è possibile usare l'esempio di codice di stored procedure prc_sqldw_create_stats riportato nell'articolo relativo alle statistiche.

L'esempio seguente è un buon punto di partenza per la creazione delle statistiche. Qui vengono create statistiche a colonna singola su ogni colonna nella tabella della dimensione e su ogni colonna di join nelle tabelle dei fatti. È sempre possibile aggiungere in un secondo momento statistiche a colonna singola o a più colonne per altre colonne delle tabelle dei fatti.

Obiettivo raggiunto

I dati sono stati caricati correttamente nel data warehouse. Fantastico!

Passaggi successivi

Il caricamento dei dati è il primo passaggio per lo sviluppo di una soluzione di data warehouse con Azure Synapse Analytics. Vedere le risorse di sviluppo.

Per altri esempi di caricamento e riferimenti, vedere la documentazione seguente: