WideWorldImportersDW utilizzo delle funzionalità di SQL ServerWideWorldImportersDW use of SQL Server features and capabilities

WideWorldImportersDW è progettato per illustrare molte delle funzionalità chiave di SQL Server che sono adatte per analitica e di data warehousing.WideWorldImportersDW is designed to showcase many of the key features of SQL Server that are suitable for data warehousing and analytics. Di seguito è riportato un elenco di funzionalità di SQL Server e funzionalità e una descrizione di come vengono usati in WideWorldImportersDW.The following is a list of SQL Server features and capabilities, and a description of how they are used in WideWorldImportersDW.

PolyBasePolyBase

[Si applica a SQL Server (2016 e versioni successive)][Applies to SQL Server (2016 and later)]

PolyBase è usato per combinare le informazioni di vendita da WideWorldImportersDW con un set di dati pubblico su dati demografici per capire quali città potrebbe essere di interesse per l'ulteriore espansione delle vendite.PolyBase is used to combine sales information from WideWorldImportersDW with a public data set about demographics to understand which cities might be of interest for further expansion of sales.

Per abilitare l'utilizzo di PolyBase nel database di esempio, verificare che sia installato ed eseguire la stored procedure seguente nel database:To enable the use of PolyBase in the sample database, make sure it is installed, and run the following stored procedure in the database:

EXEC [Application].[Configuration_ApplyPolybase]

Verrà creata una tabella esterna dbo.CityPopulationStatistics che fa riferimento a un set di dati pubblico che contiene i dati della popolazione per città degli Stati Uniti, ospitato nel servizio di archiviazione blob di Azure.This will create an external table dbo.CityPopulationStatistics that references a public data set that contains population data for cities in the United States, hosted in Azure blob storage. Sono invitati a esaminare il codice della stored procedure per comprendere il processo di configurazione.You are encouraged to review the code in the stored procedure to understand the configuration process. Se si desidera ospitare i propri dati nell'archiviazione blob di Azure e garantirne la sicurezza dall'accesso pubblico generale, è necessario intraprendere ulteriori passaggi di configurazione.If you want to host your own data in Azure blob storage and keep it secure from general public access, you will need to undertake additional configuration steps. La query seguente restituisce i dati dal set di dati esterni:The following query returns the data from that external data set:

SELECT CityID, StateProvinceCode, CityName, YearNumber, LatestRecordedPopulation FROM dbo.CityPopulationStatistics;

Per comprendere quali città potrebbe essere di interesse per l'ulteriore espansione, la query seguente esamina il tasso di crescita di città e restituisce il più grandi città primi 100 con crescita significativa, e in Wide World Importers non dispone di una presenza delle vendite.To understand which cities might be of interest for further expansion, the following query looks at the growth rate of cities, and returns the top 100 largest cities with significant growth, and where Wide World Importers does not have a sales presence. La query implica un join tra la tabella remota dbo.CityPopulationStatistics e la tabella locale Dimension.Citye un filtro che interessano la tabella locale Fact.Sales.The query involves a join between the remote table dbo.CityPopulationStatistics and the local table Dimension.City, and a filter involving the local table Fact.Sales.

WITH PotentialCities
AS
(
    SELECT cps.CityName,
           cps.StateProvinceCode,
           MAX(cps.LatestRecordedPopulation) AS PopulationIn2016,
           (MAX(cps.LatestRecordedPopulation) - MIN(cps.LatestRecordedPopulation)) * 100.0
               / MIN(cps.LatestRecordedPopulation) AS GrowthRate
    FROM dbo.CityPopulationStatistics AS cps
    WHERE cps.LatestRecordedPopulation IS NOT NULL
    AND cps.LatestRecordedPopulation <> 0
    GROUP BY cps.CityName, cps.StateProvinceCode
),
InterestingCities
AS
(
    SELECT DISTINCT pc.CityName,
                    pc.StateProvinceCode,
                    pc.PopulationIn2016,
                    FLOOR(pc.GrowthRate) AS GrowthRate
    FROM PotentialCities AS pc
    INNER JOIN Dimension.City AS c
    ON pc.CityName = c.City
    WHERE GrowthRate > 2.0
    AND NOT EXISTS (SELECT 1 FROM Fact.Sale AS s WHERE s.[City Key] = c.[City Key])
)
SELECT TOP(100) CityName, StateProvinceCode, PopulationIn2016, GrowthRate
FROM InterestingCities
ORDER BY PopulationIn2016 DESC;

Indici columnstore clusterClustered Columnstore Indexes

(Versione completa dell'esempio)(Full version of the sample)

Gli indici di Columnstore cluster (CCI) vengono utilizzati con tutte le tabelle dei fatti per ridurre il footprint di memoria e migliorare le prestazioni delle query.Clustered Columnstore Indexes (CCI) are used with all the fact tables, to reduce storage footprint and improve query performance. Con l'utilizzo dell'indice ColumnStore cluster, l'archiviazione di base per le tabelle dei fatti Usa la compressione della colonna.With the use of CCI, the base storage for the fact tables uses column compression.

Gli indici non cluster vengono utilizzati nella parte superiore dell'indice columnstore cluster, per facilitare la chiave primaria e vincoli di chiave esterna.Nonclustered indexes are used on top of the clustered columnstore index, to facilitate primary key and foreign key constraints. Questi vincoli sono stati aggiunti da una varietà di attenzione: il processo ETL origini dati dal database WideWorldImporters, che presenta vincoli di integrità.These constraints were added out of an abundance of caution - the ETL process sources the data from the WideWorldImporters database, which has constraints to enforce integrity. Rimozione di vincoli di chiavi primarie ed esterne e i relativi indici di supporto, consentirebbe di ridurre il footprint di memoria delle tabelle dei fatti.Removing primary and foreign key constraints, and their supporting indexes, would reduce the storage footprint of the fact tables.

Dimensioni dei datiData size

Il database di esempio in modo limitato le dimensioni dei dati, per consentire un facile scaricare e installare l'esempio.The sample database has limited data size, to make it easy to download and install the sample. Tuttavia, per visualizzare i vantaggi reali prestazioni degli indici columnstore, si desidera utilizzare un set di dati più grande.However, to see the real performance benefits of columnstore indexes, you would want to use a larger data set.

È possibile eseguire l'istruzione seguente per aumentare le dimensioni del Fact.Sales tabella tramite l'inserimento di un altro 12 milioni di righe di dati di esempio.You can run the following statement to increase the size of the Fact.Sales table by inserting another 12 million rows of sample data. Queste sono tutte inserite righe per l'anno 2012, tali da non interferire con il processo ETL.These rows are all inserted for the year 2012, such that there is no interference with the ETL process.

EXECUTE [Application].[Configuration_PopulateLargeSaleTable]

Questa istruzione richiederà circa 5 minuti per l'esecuzione.This statement will take around 5 minutes to run. Per inserire più di 12 milioni di righe, passare il numero desiderato di righe da inserire come parametro per questa stored procedure.To insert more than 12 million rows, pass the desired number of rows to insert as a parameter to this stored procedure.

Per confrontare le prestazioni delle query con e senza columnstore, è possibile eliminare e/o ricreare l'indice columnstore cluster.To compare query performance with and without columnstore, you can drop and/or recreate the clustered columnstore index.

Per eliminare l'indice:To drop the index:

DROP INDEX [CCX_Fact_Order] ON [Fact].[Order]

Per ricreare:To recreate:

CREATE CLUSTERED COLUMNSTORE INDEX [CCX_Fact_Order] ON [Fact].[Order]

PartizionamentoPartitioning

(Versione completa dell'esempio)(Full version of the sample)

Dimensioni dei dati in un Data Warehouse possono diventare molto grande.Data size in a Data Warehouse can grow very large. È pertanto consigliabile utilizzare il partizionamento per gestire l'archiviazione delle tabelle nel database di grandi dimensioni.Therefore it is best practice to use partitioning to manage the storage of the large tables in the database.

Tutte le tabelle dei fatti più grandi vengono partizionate per anno.All of the larger fact tables are partitioned by year. L'unica eccezione è Fact.Stock Holdings, che non è basato su data e l'ha dimensioni di dati limitati confrontato con le altre tabelle dei fatti.The only exception is Fact.Stock Holdings, which is not date-based and has limited data size compared with the other fact tables.

La funzione di partizione utilizzata per le tabelle partizionate tutti PF_Date, e viene utilizzato lo schema di partizione è PS_Date.The partition function used for all partitioned tables is PF_Date, and the partition scheme being used is PS_Date.

OLTP in memoriaIn-Memory OLTP

(Versione completa dell'esempio)(Full version of the sample)

WideWorldImportersDW utilizza le tabelle con ottimizzazione per la memoria SCHEMA_ONLY per le tabelle di gestione temporanea.WideWorldImportersDW uses SCHEMA_ONLY memory-optimized tables for the staging tables. Tutti Integration. * _Staging sono tabelle con ottimizzazione per la memoria SCHEMA_ONLY.All Integration.*_Staging tables are SCHEMA_ONLY memory-optimized tables.

Il vantaggio di tabelle SCHEMA_ONLY è che non vengono registrate e non richiedono alcun accesso al disco.The advantage of SCHEMA_ONLY tables is that they are not logged, and do not require any disk access. Ciò migliora le prestazioni del processo ETL.This improves the performance of the ETL process. Poiché queste tabelle non vengono registrate, i relativi contenuti vengono perduti se si è verificato un errore.Since these tables are not logged, their contents are lost if there is a failure. Tuttavia, l'origine dati è ancora disponibile, quindi è possibile riavviare il processo ETL semplicemente se si verifica un errore.However, the data source is still available, so the ETL process can simply be restarted if a failure occurs.