Guida per l'uso di PolyBase in SQL Data WarehouseGuide for using PolyBase in SQL Data Warehouse

Questa guida offre informazioni pratiche per l'uso di PolyBase in SQL Data Warehouse.This guide gives practical information for using PolyBase in SQL Data Warehouse.

Per iniziare, seguire l'esercitazione Caricamento dei dati con PolyBase.To get started, see the Load data with PolyBase tutorial.

Rotazione delle chiavi di archiviazioneRotating storage keys

A volte si desidererà modificare la chiave di accesso per l'archiviazione blob per motivi di sicurezza.From time to time you will want to change the access key to your blob storage for security reasons.

Il modo più elegante per eseguire questa operazione consiste nel seguire un processo noto come "ruotare le chiavi".The most elegant way to perform this task is to follow a process known as "rotating the keys". Si sarà notato che siano due chiavi di archiviazione per l'account di archiviazione blob.You may have noticed that you have two storage keys for your blob storage account. Si tratta in modo che è possibile eseguire la transizioneThis is so that you can transition

Ruotare le chiavi dell'account di archiviazione di Azure è un processo semplice tre passaggioRotating your Azure storage account keys is a simple three step process

  1. Creare seconda credenziale con ambito database in base alla chiave di accesso di archiviazione secondarioCreate second database scoped credential based on the secondary storage access key
  2. Creare una seconda origine dati esterna in base a questa nuova credenzialeCreate second external data source based off this new credential
  3. Eliminare e creare le tabelle esterne che puntano alla nuova origine dati esternaDrop and create the external table(s) pointing to the new external data source

Dopo aver migrato esterno tutte le tabelle per la nuova origine dati esterna, quindi è possibile eseguire attività di pulizia:When you have migrated all your external tables to the new external data source then you can perform the clean up tasks:

  1. Eliminare prima origine dati esternaDrop first external data source
  2. Credenziali in base alla chiave di accesso di archiviazione primaria con ambito database primo di rilascioDrop first database scoped credential based on the primary storage access key
  3. Accedere a Azure e rigenerare la chiave di accesso primaria pronta per la volta successivaLog into Azure and regenerate the primary access key ready for the next time

Caricare dati con tabelle esterneLoad data with External Tables

Questo esempio carica i dati dall'archiviazione BLOB di Azure nel database di SQL Data Warehouse.This example loads data from Azure blob storage to SQL Data Warehouse database.

Archiviando i dati direttamente viene eliminato il tempo di trasferimento dei dati per le query.Storing data directly removes the data transfer time for queries. L'archiviazione dei dati con un indice columnstore migliora le prestazioni delle query di analisi fino a 10 volte.Storing data with a columnstore index improves query performance for analysis queries by up to 10x.

Questo esempio usa l'istruzione CREATE TABLE AS SELECT per caricare i dati.This example uses the CREATE TABLE AS SELECT statement to load data. La nuova tabella eredita le colonne indicate nella query.The new table inherits the columns named in the query. Eredita i tipi di dati di tali colonne dalla definizione della tabella esterna.It inherits the data types of those columns from the external table definition.

CREATE TABLE AS SELECT è un’istruzione con elevate prestazioni di Transact-SQL che carica i dati in parallelo per tutti i nodi di calcolo di SQL Data Warehouse.CREATE TABLE AS SELECT is a highly performant Transact-SQL statement that loads the data in parallel to all the compute nodes of your SQL Data Warehouse. È stata sviluppata in origine per il motore di elaborazione a elevato parallelismo (MPP) nel sistema di piattaforma di analisi ed è ora inclusa in SQL Data Warehouse.It was originally developed for the massively parallel processing (MPP) engine in Analytics Platform System and is now in SQL Data Warehouse.

-- Load data from Azure blob storage to SQL Data Warehouse

CREATE TABLE [dbo].[Customer_Speed]
WITH
(   
    CLUSTERED COLUMNSTORE INDEX
,    DISTRIBUTION = HASH([CarSensor_Data].[CustomerKey])
)
AS
SELECT *
FROM   [ext].[CarSensor_Data]
;

Vedere CREATE TABLE AS SELECT (Transact-SQL).See CREATE TABLE AS SELECT (Transact-SQL).

Nota

Un caricamento con una tabella esterna può avere esito negativo con l'errore "Query interrotta. È stata raggiunta la soglia massima di rifiuti durante la lettura da un'origine esterna".A load using an external table can fail with the error "Query aborted-- the maximum reject threshold was reached while reading from an external source". Indica che i dati esterni contengono record sporchi .This indicates that your external data contains dirty records. Un record di dati viene considerato "sporco" se i tipi/numero dei dati effettivi delle colonne non corrispondono a definizioni di colonna della tabella esterna o se i dati non sono conformi al formato di file esterno specificato.A data record is considered 'dirty' if the actual data types/number of columns do not match the column definitions of the external table or if the data doesn't conform to the specified external file format. Per risolvere questo problema, assicurarsi che la tabella esterna e le definizioni del formato del file esterno siano corrette e i dati esterni siano conformi a queste definizioni.To fix this, ensure that your external table and external file format definitions are correct and your external data conforms to these definitions. Nel caso in cui un subset di record di dati esterni sia sporco, è possibile scegliere di rifiutare tali record per le query utilizzando le opzioni di rifiuto in CREATE EXTERNAL TABLE DDL.In case a subset of external data records are dirty, you can choose to reject these records for your queries by using the reject options in CREATE EXTERNAL TABLE DDL.

Creare statistiche sui dati appena caricatiCreate Statistics on newly loaded data

SQL Data Warehouse di Azure non supporta ancora le statistiche di creazione automatica o aggiornamento automatico.Azure SQL Data Warehouse does not yet support auto create or auto update statistics. Per ottenere le migliori prestazioni dalle query, è importante creare statistiche per tutte le colonne di tutte le tabelle dopo il primo caricamento o dopo eventuali modifiche sostanziali dei dati.In order to get the best performance from your queries, it's important that statistics be created on all columns of all tables after the first load or any substantial changes occur in the data. Per una spiegazione dettagliata delle statistiche, vedere l'argomento Statistiche nel gruppo di argomenti sullo sviluppo.For a detailed explanation of statistics, see the Statistics topic in the Develop group of topics. Di seguito è possibile vedere un rapido esempio di come creare statistiche nella tabella caricata in questo esempio.Below is a quick example of how to create statistics on the tabled loaded in this example.

create statistics [SensorKey] on [Customer_Speed] ([SensorKey]);
create statistics [CustomerKey] on [Customer_Speed] ([CustomerKey]);
create statistics [GeographyKey] on [Customer_Speed] ([GeographyKey]);
create statistics [Speed] on [Customer_Speed] ([Speed]);
create statistics [YearMeasured] on [Customer_Speed] ([YearMeasured]);

Esportare dati con tabelle esterneExport data with External Tables

Questa sezione illustra come esportare i dati da SQL Data Warehouse in Archiviazione BLOB di Azure usando tabelle esterne.This section shows how to export data from SQL Data Warehouse to Azure blob storage using external tables. In questo esempio si utilizza CREATE EXTERNAL TABLE AS SELECT che è un’istruzione con elevate prestazioni di Transact-SQL per esportare i dati in parallelo da tutti i nodi di calcolo.This example uses CREATE EXTERNAL TABLE AS SELECT which is a highly performant Transact-SQL statement to export the data in parallel from all the compute nodes.

Nell'esempio seguente si crea una tabella esterna Weblogs2014 utilizzando le definizioni delle colonne e dati dalla tabella dbo.Weblogs.The following example creates an external table Weblogs2014 using column definitions and data from dbo.Weblogs table. La definizione della tabella esterna viene archiviata in SQL Data Warehouse e i risultati dell’istruzione SELECT sono esportati nella directory "/ archiviazione/log2014 /" nel contenitore BLOB specificato dall'origine dati.The external table definition is stored in SQL Data Warehouse and the results of the SELECT statement are exported to the "/archive/log2014/" directory under the blob container specified by the data source. I dati vengono esportati nel formato di file di testo specificato.The data is exported in the specified text file format.

CREATE EXTERNAL TABLE Weblogs2014 WITH
(
    LOCATION='/archive/log2014/',
    DATA_SOURCE=azure_storage,
    FILE_FORMAT=text_file_format
)
AS
SELECT
    Uri,
    DateRequested
FROM
    dbo.Weblogs
WHERE
    1=1
    AND DateRequested > '12/31/2013'
    AND DateRequested < '01/01/2015';

Isolare il caricamento degli utentiIsolate Loading Users

È spesso necessario fare in modo che più utenti possano caricare dati in un data warehouse SQL.There is often a need to have multiple users that can load data into a SQL DW. Dato che CREATE TABLE AS SELECT (Transact-SQL) richiede autorizzazioni CONTROL per il database, il risultato sarà la presenza di più utenti con accesso di controllo su tutti gli schemi.Because the CREATE TABLE AS SELECT (Transact-SQL) requires CONTROL permissions of the database, you will end up with multiple users with control access over all schemas. Per limitare questa situazione, è possibile usare l'istruzione DENY CONTROL.To limit this, you can use the DENY CONTROL statement.

Esempio: si supponga che esistano gli schemi di database schema_A per reparto A e schema_B per reparto B e di consentire agli utenti di database utente_A e utente _B di effettuare caricamenti PolyBase rispettivamente in reparto A e B.Example: Consider database schemas schema_A for dept A, and schema_B for dept B Let database users user_A and user_B be users for PolyBase loading in dept A and B, respectively. A entrambi gli utenti sono state concesse le autorizzazioni di database CONTROL.They both have been granted CONTROL database permissions. Gli autori di schema A e B usano a questo punto DENY per bloccare i rispettivi schemi:The creators of schema A and B now lock down their schemas using DENY:

   DENY CONTROL ON SCHEMA :: schema_A TO user_B;
   DENY CONTROL ON SCHEMA :: schema_B TO user_A;

In questo modo, utente_A e utente_B dovrebbero ora essere esclusi dall'accesso allo schema del reparto dell'altro utente.With this, user_A and user_B should now be locked out from the other dept’s schema.

Ottimizzazioni delle prestazioni di PolyBasePolyBase performance optimizations

Per ottenere prestazioni di caricamento ottimali con PolyBase si consiglia quanto segue:To achieve optimal loading performance with PolyBase we suggest the following:

  • Suddividere i file compressi di grandi dimensioni in file compressi di dimensioni inferiori.Split large compressed files into smaller compressed files. I tipi di compressione attualmente supportati non sono divisibili.The compression types supported today are not splittable. Si noterà quindi un peggioramento delle prestazioni caricando un unico file di grandi dimensioni.As a result, performance will be impacted by loading a single large file.
  • Per ottenere la velocità massima, eseguire il caricamento in una tabella heap di staging round_robin.For fastest loading speed, load into a round_robin, heap staging table. Si tratta del modo più efficiente per spostare i dati dal livello di archiviazione al data warehouse.This will be the most efficient way to move the data from storage layer to the data warehouse.
  • Tutti i formati di file hanno caratteristiche di prestazioni diverse.All file formats have different performance characteristics. Per ottenere la velocità di caricamento massima, usare file di testo delimitati compressi.For the fastest load, use compressed delimited text files. La differenza di prestazioni tra UTF-8 e UTF-16 è minima.The difference between UTF-8 and UTF-16 performance is minimal.
  • Condividere il percorso del livello di archiviazione e del data warehouse per ridurre al minimo la latenzaCo-locate your storage layer and your data warehouse to minimize latency
  • Aumentare le prestazioni del data warehouse se si prevede un processo di caricamento di grandi dimensioni.Scale up your data warehouse if you expect a large loading job.

Limitazioni di PolyBasePolyBase Limitations

PolyBase in SQL Data Warehouse presenta le limitazioni seguenti che devono essere prese in considerazione quando si progetta un processo di caricamento:PolyBase in SQL DW has the following limitations that need to be taken into consideration when designing a loading job:

  • Una singola riga non può essere maggiore di 1.000.000 byte,A single row cannot be wider than 1,000,000 bytes. indipendentemente dallo schema di tabella definito.This is true regardless of the table schema defined.
  • Quando si esportano dati in un formato file ORC da SQL Server o Azure SQL Data Warehouse, le colonne con molto testo possono essere limitate a 50, a causa di errori di memoria insufficiente di Java.When exporting data into an ORC File Format from SQL Server or Azure SQL Data Warehouse text heavy columns can be limited to as few as 50 columns due to java out of memory errors. Per risolvere questo problema, esportare solo un subset di colonne.To work around this, export only a subset of the columns.

Passaggi successiviNext steps

Per ulteriori informazioni sullo spostamento di dati in SQL Data Warehouse, vedere Panoramica sulla migrazione di dati.To learn more about moving data to SQL Data Warehouse, see the data migration overview.