62 KiB
Use PolyBase to load public Contoso Retail Data Warehouse data into Azure SQL Data Warehouse
Use PolyBase to load public data from Azure blob storage into the Contoso Retail Data Warehouse schema.
In this tutorial you will:
- Configure PolyBase for loading from a public blob storage container.
- Load the data into columnstore indexes
- Perform optimizations after the load is finished.
Before you begin
To run this tutorial, you need an Azure account that already has a SQL Data Warehouse database. If you don't already have this, see Create a SQL Data Warehouse.
1. Configure data connectivity
PolyBase uses T-SQL external objects to define the location and attributes of the external data. The external object definitions are stored in SQL Data Warehouse. The data itself is stored externally.
1.1. Create a credential (optional)
Skip this step if you are using the tutorial to load the Contoso data. You don't need secure access to the data since it is already accessible to anyone.
If you are using this tutorial as a guide for importing your own data, you need to secure access to the data. This script shows how to create a master key for the database. It then creates and uses a database-scoped credential to define the external data source.
-- A: Create a master key.
-- Only necessary if one does not already exist.
-- Required to encrypt the credential secret in the next step.
CREATE MASTER KEY;
-- B: Create a database scoped credential
-- IDENTITY: Provide any string, it is not used for authentication to Azure storage.
-- SECRET: Provide your Azure storage account key.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
IDENTITY = 'user',
SECRET = '<azure_storage_account_key>'
;
-- C: Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure blob storage.
-- LOCATION: Provide Azure storage account name and blob container name.
-- CREDENTIAL: Provide the credential created in the previous step.
CREATE EXTERNAL DATA SOURCE AzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://<blob_container_name>@<azure_storage_account_name>.blob.core.windows.net',
CREDENTIAL = AzureStorageCredential
);
Skip to step 1.3.
1.2. Create the external data source
Use this CREATE EXTERNAL DATA SOURCE command to store the location of the data, and the type of data.
CREATE EXTERNAL DATA SOURCE AzureStorage_west_public
WITH
(
TYPE = Hadoop
, LOCATION = 'wasbs://contosoretaildw-tables@contosoretaildw.blob.core.windows.net/'
);
[AZURE.IMPORTANT] If you choose to make your azure blob storage containers public, remember that as the data owner you will be charged for data egress charges when data leaves the data center.
2. Configure data format
The data is stored in text files in Azure blob storage, and each field is separated with a delimiter. Run this CREATE EXTERNAL FILE FORMAT command to specify the format of the data in the text files. The Contoso data is uncompressed and pipe delimited.
CREATE EXTERNAL FILE FORMAT TextFileFormat
WITH
( FORMAT_TYPE = DELIMITEDTEXT
, FORMAT_OPTIONS ( FIELD_TERMINATOR = '|'
, STRING_DELIMITER = ''
, DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fff'
, USE_TYPE_DEFAULT = FALSE
)
);
3. Create the external tables
Now that you have specified the data source and file format, you are ready to create the external tables.
3.1. Create a schema for the data.
To create a place to store the Contoso data in your database, create a schema.
CREATE SCHEMA [asb]
GO
3.2. Create the external tables.
An external table contains column names and types, just like any other database table. It simply doesn't contain the data.
Now let's create the external tables. All we are doing here is defining column names and data types, and binding them to the location and format of the Azure blob storage files. The location is the folder under the root directory of the Azure Storage Blob.
Be warned; this is a long script!
--DimAccount
CREATE EXTERNAL TABLE [asb].DimAccount
(
[AccountKey] [int] NOT NULL,
[ParentAccountKey] [int] NULL,
[AccountLabel] [nvarchar](100) NULL,
[AccountName] [nvarchar](50) NULL,
[AccountDescription] [nvarchar](50) NULL,
[AccountType] [nvarchar](50) NULL,
[Operator] [nvarchar](50) NULL,
[CustomMembers] [nvarchar](300) NULL,
[ValueType] [nvarchar](50) NULL,
[CustomMemberOptions] [nvarchar](200) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimAccount/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimChannel
CREATE EXTERNAL TABLE [asb].DimChannel
(
[ChannelKey] [int] NOT NULL,
[ChannelLabel] [nvarchar](100) NOT NULL,
[ChannelName] [nvarchar](20) NULL,
[ChannelDescription] [nvarchar](50) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimChannel/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimCurrency
CREATE EXTERNAL TABLE [asb].DimCurrency
(
[CurrencyKey] [int] NOT NULL,
[CurrencyLabel] [nvarchar](10) NOT NULL,
[CurrencyName] [nvarchar](20) NOT NULL,
[CurrencyDescription] [nvarchar](50) NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimCurrency/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimCustomer
CREATE EXTERNAL TABLE [asb].DimCustomer
(
[CustomerKey] [int] NOT NULL,
[GeographyKey] [int] NOT NULL,
[CustomerLabel] [nvarchar](100) NOT NULL,
[Title] [nvarchar](8) NULL,
[FirstName] [nvarchar](50) NULL,
[MiddleName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[NameStyle] [bit] NULL,
[BirthDate] [datetime] NULL,
[MaritalStatus] [nchar](1) NULL,
[Suffix] [nvarchar](10) NULL,
[Gender] [nvarchar](1) NULL,
[EmailAddress] [nvarchar](50) NULL,
[YearlyIncome] [money] NULL,
[TotalChildren] [tinyint] NULL,
[NumberChildrenAtHome] [tinyint] NULL,
[Education] [nvarchar](40) NULL,
[Occupation] [nvarchar](100) NULL,
[HouseOwnerFlag] [nchar](1) NULL,
[NumberCarsOwned] [tinyint] NULL,
[AddressLine1] [nvarchar](120) NULL,
[AddressLine2] [nvarchar](120) NULL,
[Phone] [nvarchar](20) NULL,
[DateFirstPurchase] [datetime] NULL,
[CustomerType] [nvarchar](15) NULL,
[CompanyName] [nvarchar](100) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimCustomer/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimDate
CREATE EXTERNAL TABLE [asb].DimDate
(
[Datekey] [datetime] NOT NULL,
[FullDateLabel] [nvarchar](20) NOT NULL,
[DateDescription] [nvarchar](20) NOT NULL,
[CalendarYear] [int] NOT NULL,
[CalendarYearLabel] [nvarchar](20) NOT NULL,
[CalendarHalfYear] [int] NOT NULL,
[CalendarHalfYearLabel] [nvarchar](20) NOT NULL,
[CalendarQuarter] [int] NOT NULL,
[CalendarQuarterLabel] [nvarchar](20) NULL,
[CalendarMonth] [int] NOT NULL,
[CalendarMonthLabel] [nvarchar](20) NOT NULL,
[CalendarWeek] [int] NOT NULL,
[CalendarWeekLabel] [nvarchar](20) NOT NULL,
[CalendarDayOfWeek] [int] NOT NULL,
[CalendarDayOfWeekLabel] [nvarchar](10) NOT NULL,
[FiscalYear] [int] NOT NULL,
[FiscalYearLabel] [nvarchar](20) NOT NULL,
[FiscalHalfYear] [int] NOT NULL,
[FiscalHalfYearLabel] [nvarchar](20) NOT NULL,
[FiscalQuarter] [int] NOT NULL,
[FiscalQuarterLabel] [nvarchar](20) NOT NULL,
[FiscalMonth] [int] NOT NULL,
[FiscalMonthLabel] [nvarchar](20) NOT NULL,
[IsWorkDay] [nvarchar](20) NOT NULL,
[IsHoliday] [int] NOT NULL,
[HolidayName] [nvarchar](20) NOT NULL,
[EuropeSeason] [nvarchar](50) NULL,
[NorthAmericaSeason] [nvarchar](50) NULL,
[AsiaSeason] [nvarchar](50) NULL
)
WITH
(
LOCATION='/DimDate/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimEmployee
CREATE EXTERNAL TABLE [asb].DimEmployee
(
[EmployeeKey] [int] NOT NULL,
[ParentEmployeeKey] [int] NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[MiddleName] [nvarchar](50) NULL,
[Title] [nvarchar](50) NULL,
[HireDate] [datetime] NULL,
[BirthDate] [datetime] NULL,
[EmailAddress] [nvarchar](50) NULL,
[Phone] [nvarchar](25) NULL,
[MaritalStatus] [nchar](1) NULL,
[EmergencyContactName] [nvarchar](50) NULL,
[EmergencyContactPhone] [nvarchar](25) NULL,
[SalariedFlag] [bit] NULL,
[Gender] [nchar](1) NULL,
[PayFrequency] [tinyint] NULL,
[BaseRate] [money] NULL,
[VacationHours] [smallint] NULL,
[CurrentFlag] [bit] NOT NULL,
[SalesPersonFlag] [bit] NOT NULL,
[DepartmentName] [nvarchar](50) NULL,
[StartDate] [datetime] NULL,
[EndDate] [datetime] NULL,
[Status] [nvarchar](50) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimEmployee/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimEntity
CREATE EXTERNAL TABLE [asb].DimEntity
(
[EntityKey] [int] NOT NULL,
[EntityLabel] [nvarchar](100) NULL,
[ParentEntityKey] [int] NULL,
[ParentEntityLabel] [nvarchar](100) NULL,
[EntityName] [nvarchar](50) NULL,
[EntityDescription] [nvarchar](100) NULL,
[EntityType] [nvarchar](100) NULL,
[StartDate] [datetime] NULL,
[EndDate] [datetime] NULL,
[Status] [nvarchar](50) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimEntity/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimGeography
CREATE EXTERNAL TABLE [asb].DimGeography
(
[GeographyKey] [int] NOT NULL,
[GeographyType] [nvarchar](50) NOT NULL,
[ContinentName] [nvarchar](50) NOT NULL,
[CityName] [nvarchar](100) NULL,
[StateProvinceName] [nvarchar](100) NULL,
[RegionCountryName] [nvarchar](100) NULL,
-- [Geometry] [geometry] NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimGeography/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimMachine
CREATE EXTERNAL TABLE [asb].DimMachine
(
[MachineKey] [int] NOT NULL,
[MachineLabel] [nvarchar](100) NULL,
[StoreKey] [int] NOT NULL,
[MachineType] [nvarchar](50) NOT NULL,
[MachineName] [nvarchar](100) NOT NULL,
[MachineDescription] [nvarchar](200) NOT NULL,
[VendorName] [nvarchar](50) NOT NULL,
[MachineOS] [nvarchar](50) NOT NULL,
[MachineSource] [nvarchar](100) NOT NULL,
[MachineHardware] [nvarchar](100) NULL,
[MachineSoftware] [nvarchar](100) NOT NULL,
[Status] [nvarchar](50) NOT NULL,
[ServiceStartDate] [datetime] NOT NULL,
[DecommissionDate] [datetime] NULL,
[LastModifiedDate] [datetime] NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimMachine/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimOutage
CREATE EXTERNAL TABLE [asb].DimOutage (
[OutageKey] [int] NOT NULL,
[OutageLabel] [nvarchar](100) NOT NULL,
[OutageName] [nvarchar](50) NOT NULL,
[OutageDescription] [nvarchar](200) NOT NULL,
[OutageType] [nvarchar](50) NOT NULL,
[OutageTypeDescription] [nvarchar](200) NOT NULL,
[OutageSubType] [nvarchar](50) NOT NULL,
[OutageSubTypeDescription] [nvarchar](200) NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimOutage/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimProduct
CREATE EXTERNAL TABLE [asb].DimProduct (
[ProductKey] [int] NOT NULL,
[ProductLabel] [nvarchar](255) NULL,
[ProductName] [nvarchar](500) NULL,
[ProductDescription] [nvarchar](400) NULL,
[ProductSubcategoryKey] [int] NULL,
[Manufacturer] [nvarchar](50) NULL,
[BrandName] [nvarchar](50) NULL,
[ClassID] [nvarchar](10) NULL,
[ClassName] [nvarchar](20) NULL,
[StyleID] [nvarchar](10) NULL,
[StyleName] [nvarchar](20) NULL,
[ColorID] [nvarchar](10) NULL,
[ColorName] [nvarchar](20) NOT NULL,
[Size] [nvarchar](50) NULL,
[SizeRange] [nvarchar](50) NULL,
[SizeUnitMeasureID] [nvarchar](20) NULL,
[Weight] [float] NULL,
[WeightUnitMeasureID] [nvarchar](20) NULL,
[UnitOfMeasureID] [nvarchar](10) NULL,
[UnitOfMeasureName] [nvarchar](40) NULL,
[StockTypeID] [nvarchar](10) NULL,
[StockTypeName] [nvarchar](40) NULL,
[UnitCost] [money] NULL,
[UnitPrice] [money] NULL,
[AvailableForSaleDate] [datetime] NULL,
[StopSaleDate] [datetime] NULL,
[Status] [nvarchar](7) NULL,
[ImageURL] [nvarchar](150) NULL,
[ProductURL] [nvarchar](150) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimProduct/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimProductCategory
CREATE EXTERNAL TABLE [asb].DimProductCategory (
[ProductCategoryKey] [int] NOT NULL,
[ProductCategoryLabel] [nvarchar](100) NULL,
[ProductCategoryName] [nvarchar](30) NOT NULL,
[ProductCategoryDescription] [nvarchar](50) NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimProductCategory/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimProductSubcategory
CREATE EXTERNAL TABLE [asb].DimProductSubcategory (
[ProductSubcategoryKey] [int] NOT NULL,
[ProductSubcategoryLabel] [nvarchar](100) NULL,
[ProductSubcategoryName] [nvarchar](50) NOT NULL,
[ProductSubcategoryDescription] [nvarchar](100) NULL,
[ProductCategoryKey] [int] NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimProductSubcategory/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimPromotion
CREATE EXTERNAL TABLE [asb].DimPromotion (
[PromotionKey] [int] NOT NULL,
[PromotionLabel] [nvarchar](100) NULL,
[PromotionName] [nvarchar](100) NULL,
[PromotionDescription] [nvarchar](255) NULL,
[DiscountPercent] [float] NULL,
[PromotionType] [nvarchar](50) NULL,
[PromotionCategory] [nvarchar](50) NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NULL,
[MinQuantity] [int] NULL,
[MaxQuantity] [int] NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimPromotion/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimSalesTerritory
CREATE EXTERNAL TABLE [asb].DimSalesTerritory (
[SalesTerritoryKey] [int] NOT NULL,
[GeographyKey] [int] NOT NULL,
[SalesTerritoryLabel] [nvarchar](100) NULL,
[SalesTerritoryName] [nvarchar](50) NOT NULL,
[SalesTerritoryRegion] [nvarchar](50) NOT NULL,
[SalesTerritoryCountry] [nvarchar](50) NOT NULL,
[SalesTerritoryGroup] [nvarchar](50) NULL,
[SalesTerritoryLevel] [nvarchar](10) NULL,
[SalesTerritoryManager] [int] NULL,
[StartDate] [datetime] NULL,
[EndDate] [datetime] NULL,
[Status] [nvarchar](50) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimSalesTerritory/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimScenario
CREATE EXTERNAL TABLE [asb].DimScenario (
[ScenarioKey] [int] NOT NULL,
[ScenarioLabel] [nvarchar](100) NOT NULL,
[ScenarioName] [nvarchar](20) NULL,
[ScenarioDescription] [nvarchar](50) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimScenario/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--DimStore
CREATE EXTERNAL TABLE [asb].DimStore
(
[StoreKey] [int] NOT NULL,
[GeographyKey] [int] NOT NULL,
[StoreManager] [int] NULL,
[StoreType] [nvarchar](15) NULL,
[StoreName] [nvarchar](100) NOT NULL,
[StoreDescription] [nvarchar](300) NOT NULL,
[Status] [nvarchar](20) NOT NULL,
[OpenDate] [datetime] NOT NULL,
[CloseDate] [datetime] NULL,
[EntityKey] [int] NULL,
[ZipCode] [nvarchar](20) NULL,
[ZipCodeExtension] [nvarchar](10) NULL,
[StorePhone] [nvarchar](15) NULL,
[StoreFax] [nvarchar](14) NULL,
[AddressLine1] [nvarchar](100) NULL,
[AddressLine2] [nvarchar](100) NULL,
[CloseReason] [nvarchar](20) NULL,
[EmployeeCount] [int] NULL,
[SellingAreaSize] [float] NULL,
[LastRemodelDate] [datetime] NULL,
[GeoLocation] NVARCHAR(50) NULL,
[Geometry] NVARCHAR(50) NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/DimStore/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--FactExchangeRate
CREATE EXTERNAL TABLE [asb].FactExchangeRate
(
[ExchangeRateKey] [int] NOT NULL,
[CurrencyKey] [int] NOT NULL,
[DateKey] [datetime] NOT NULL,
[AverageRate] [float] NOT NULL,
[EndOfDayRate] [float] NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/FactExchangeRate/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--FactInventory
CREATE EXTERNAL TABLE [asb].FactInventory (
[InventoryKey] [int] NOT NULL,
[DateKey] [datetime] NOT NULL,
[StoreKey] [int] NOT NULL,
[ProductKey] [int] NOT NULL,
[CurrencyKey] [int] NOT NULL,
[OnHandQuantity] [int] NOT NULL,
[OnOrderQuantity] [int] NOT NULL,
[SafetyStockQuantity] [int] NULL,
[UnitCost] [money] NOT NULL,
[DaysInStock] [int] NULL,
[MinDayInStock] [int] NULL,
[MaxDayInStock] [int] NULL,
[Aging] [int] NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/FactInventory/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--FactITMachine
CREATE EXTERNAL TABLE [asb].FactITMachine (
[ITMachinekey] [int] NOT NULL,
[MachineKey] [int] NOT NULL,
[Datekey] [datetime] NOT NULL,
[CostAmount] [money] NULL,
[CostType] [nvarchar](200) NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/FactITMachine/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--FactITSLA
CREATE EXTERNAL TABLE [asb].FactITSLA
(
[ITSLAkey] [int] NOT NULL,
[DateKey] [datetime] NOT NULL,
[StoreKey] [int] NOT NULL,
[MachineKey] [int] NOT NULL,
[OutageKey] [int] NOT NULL,
[OutageStartTime] [datetime] NOT NULL,
[OutageEndTime] [datetime] NOT NULL,
[DownTime] [int] NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/FactITSLA/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--FactOnlineSales
CREATE EXTERNAL TABLE [asb].FactOnlineSales
(
[OnlineSalesKey] [int] NOT NULL,
[DateKey] [datetime] NOT NULL,
[StoreKey] [int] NOT NULL,
[ProductKey] [int] NOT NULL,
[PromotionKey] [int] NOT NULL,
[CurrencyKey] [int] NOT NULL,
[CustomerKey] [int] NOT NULL,
[SalesOrderNumber] [nvarchar](20) NOT NULL,
[SalesOrderLineNumber] [int] NULL,
[SalesQuantity] [int] NOT NULL,
[SalesAmount] [money] NOT NULL,
[ReturnQuantity] [int] NOT NULL,
[ReturnAmount] [money] NULL,
[DiscountQuantity] [int] NULL,
[DiscountAmount] [money] NULL,
[TotalCost] [money] NOT NULL,
[UnitCost] [money] NULL,
[UnitPrice] [money] NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/FactOnlineSales/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--FactSales
CREATE EXTERNAL TABLE [asb].FactSales
(
[SalesKey] [int] NOT NULL,
[DateKey] [datetime] NOT NULL,
[channelKey] [int] NOT NULL,
[StoreKey] [int] NOT NULL,
[ProductKey] [int] NOT NULL,
[PromotionKey] [int] NOT NULL,
[CurrencyKey] [int] NOT NULL,
[UnitCost] [money] NOT NULL,
[UnitPrice] [money] NOT NULL,
[SalesQuantity] [int] NOT NULL,
[ReturnQuantity] [int] NOT NULL,
[ReturnAmount] [money] NULL,
[DiscountQuantity] [int] NULL,
[DiscountAmount] [money] NULL,
[TotalCost] [money] NOT NULL,
[SalesAmount] [money] NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/FactSales/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--FactSalesQuota
CREATE EXTERNAL TABLE [asb].FactSalesQuota (
[SalesQuotaKey] [int] NOT NULL,
[ChannelKey] [int] NOT NULL,
[StoreKey] [int] NOT NULL,
[ProductKey] [int] NOT NULL,
[DateKey] [datetime] NOT NULL,
[CurrencyKey] [int] NOT NULL,
[ScenarioKey] [int] NOT NULL,
[SalesQuantityQuota] [money] NOT NULL,
[SalesAmountQuota] [money] NOT NULL,
[GrossMarginQuota] [money] NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/FactSalesQuota/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
--FactStrategyPlan
CREATE EXTERNAL TABLE [asb].FactStrategyPlan
(
[StrategyPlanKey] [int] NOT NULL,
[Datekey] [datetime] NOT NULL,
[EntityKey] [int] NOT NULL,
[ScenarioKey] [int] NOT NULL,
[AccountKey] [int] NOT NULL,
[CurrencyKey] [int] NOT NULL,
[ProductCategoryKey] [int] NULL,
[Amount] [money] NOT NULL,
[ETLLoadID] [int] NULL,
[LoadDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
WITH
(
LOCATION='/FactStrategyPlan/'
, DATA_SOURCE = AzureStorage_west_public
, FILE_FORMAT = TextFileFormat
, REJECT_TYPE = VALUE
, REJECT_VALUE = 0
)
;
4. Load the data with CTAS
The easiest and most efficient way to load data from Azure blob storage is to use [CREATE TABLE AS SELECT][] (CTAS). Loading with CTAS leverages the strongly typed external tables you have just created.
4.1. Create a new schema
CTAS creates a new table that contains data. First, create a schema for the contoso data.
CREATE SCHEMA [cso]
GO
4.2. Load the data
To load the data we use one CTAS statement per table.
SELECT GETDATE();
GO
CREATE TABLE [cso].[DimAccount] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimAccount] OPTION (LABEL = 'CTAS : Load [cso].[DimAccount] ');
CREATE TABLE [cso].[DimChannel] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimChannel] OPTION (LABEL = 'CTAS : Load [cso].[DimChannel] ');
CREATE TABLE [cso].[DimCurrency] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimCurrency] OPTION (LABEL = 'CTAS : Load [cso].[DimCurrency] ');
CREATE TABLE [cso].[DimCustomer] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimCustomer] OPTION (LABEL = 'CTAS : Load [cso].[DimCustomer] ');
CREATE TABLE [cso].[DimDate] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimDate] OPTION (LABEL = 'CTAS : Load [cso].[DimDate] ');
CREATE TABLE [cso].[DimEmployee] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimEmployee] OPTION (LABEL = 'CTAS : Load [cso].[DimEmployee] ');
CREATE TABLE [cso].[DimEntity] WITH (DISTRIBUTION = HASH([EntityKey] ) ) AS SELECT * FROM [asb].[DimEntity] OPTION (LABEL = 'CTAS : Load [cso].[DimEntity] ');
CREATE TABLE [cso].[DimGeography] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimGeography] OPTION (LABEL = 'CTAS : Load [cso].[DimGeography] ');
CREATE TABLE [cso].[DimMachine] WITH (DISTRIBUTION = HASH([MachineKey] ) ) AS SELECT * FROM [asb].[DimMachine] OPTION (LABEL = 'CTAS : Load [cso].[DimMachine] ');
CREATE TABLE [cso].[DimOutage] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimOutage] OPTION (LABEL = 'CTAS : Load [cso].[DimOutage] ');
CREATE TABLE [cso].[DimProduct] WITH (DISTRIBUTION = HASH([ProductKey] ) ) AS SELECT * FROM [asb].[DimProduct] OPTION (LABEL = 'CTAS : Load [cso].[DimProduct] ');
CREATE TABLE [cso].[DimProductCategory] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimProductCategory] OPTION (LABEL = 'CTAS : Load [cso].[DimProductCategory] ');
CREATE TABLE [cso].[DimScenario] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimScenario] OPTION (LABEL = 'CTAS : Load [cso].[DimScenario] ');
CREATE TABLE [cso].[DimPromotion] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimPromotion] OPTION (LABEL = 'CTAS : Load [cso].[DimPromotion] ');
CREATE TABLE [cso].[DimProductSubcategory] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimProductSubcategory] OPTION (LABEL = 'CTAS : Load [cso].[DimProductSubcategory] ');
CREATE TABLE [cso].[DimSalesTerritory] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimSalesTerritory] OPTION (LABEL = 'CTAS : Load [cso].[DimSalesTerritory] ');
CREATE TABLE [cso].[DimStore] WITH (DISTRIBUTION = ROUND_ROBIN ) AS SELECT * FROM [asb].[DimStore] OPTION (LABEL = 'CTAS : Load [cso].[DimStore] ');
CREATE TABLE [cso].[FactITMachine] WITH (DISTRIBUTION = HASH([MachineKey] ) ) AS SELECT * FROM [asb].[FactITMachine] OPTION (LABEL = 'CTAS : Load [cso].[FactITMachine] ');
CREATE TABLE [cso].[FactITSLA] WITH (DISTRIBUTION = HASH([MachineKey] ) ) AS SELECT * FROM [asb].[FactITSLA] OPTION (LABEL = 'CTAS : Load [cso].[FactITSLA] ');
CREATE TABLE [cso].[FactInventory] WITH (DISTRIBUTION = HASH([ProductKey] ) ) AS SELECT * FROM [asb].[FactInventory] OPTION (LABEL = 'CTAS : Load [cso].[FactInventory] ');
CREATE TABLE [cso].[FactOnlineSales] WITH (DISTRIBUTION = HASH([ProductKey] ) ) AS SELECT * FROM [asb].[FactOnlineSales] OPTION (LABEL = 'CTAS : Load [cso].[FactOnlineSales] ');
CREATE TABLE [cso].[FactSales] WITH (DISTRIBUTION = HASH([ProductKey] ) ) AS SELECT * FROM [asb].[FactSales] OPTION (LABEL = 'CTAS : Load [cso].[FactSales] ');
CREATE TABLE [cso].[FactSalesQuota] WITH (DISTRIBUTION = HASH([ProductKey] ) ) AS SELECT * FROM [asb].[FactSalesQuota] OPTION (LABEL = 'CTAS : Load [cso].[FactSalesQuota] ');
CREATE TABLE [cso].[FactStrategyPlan] WITH (DISTRIBUTION = HASH([EntityKey]) ) AS SELECT * FROM [asb].[FactStrategyPlan] OPTION (LABEL = 'CTAS : Load [cso].[FactStrategyPlan] ');
CREATE TABLE [cso].[FactExchangeRate] WITH (DISTRIBUTION = HASH([ExchangeRateKey]) ) AS SELECT * FROM [asb].[FactExchangeRate] OPTION (LABEL = 'CTAS : Load [cso].[FactExchangeRate] ');
4.3 Track the load progress
You can track the progress of your load using the [sys].[dm_pdw_exec_requests] dynamic management view (DMV).
-- To see all requests
SELECT * FROM sys.dm_pdw_exec_requests;
-- To see a particular request identified by its lable
SELECT * FROM sys.dm_pdw_exec_requests as r;
WHERE r.label = "FactSales";
5. Optimize columnstore compression
By default, SQL Data Warehouse stores the table as a clustered columnstore index. After a load completes, some of the data rows might not be compressed into the columnstore. There's a variety of reasons why this can happen. To learn more, see ... .
To optimize query performance and columnstore compression after a load, rebuild the table to force the columnstore index to compress all the rows.
SELECT GETDATE();
GO
ALTER INDEX ALL ON [cso].[FactStrategyPlan] REBUILD;
ALTER INDEX ALL ON [cso].[DimAccount] REBUILD;
ALTER INDEX ALL ON [cso].[DimChannel] REBUILD;
ALTER INDEX ALL ON [cso].[DimCurrency] REBUILD;
ALTER INDEX ALL ON [cso].[DimCustomer] REBUILD;
ALTER INDEX ALL ON [cso].[DimDate] REBUILD;
ALTER INDEX ALL ON [cso].[DimEmployee] REBUILD;
ALTER INDEX ALL ON [cso].[DimEntity] REBUILD;
ALTER INDEX ALL ON [cso].[DimGeography] REBUILD;
ALTER INDEX ALL ON [cso].[DimMachine] REBUILD;
ALTER INDEX ALL ON [cso].[DimOutage] REBUILD;
ALTER INDEX ALL ON [cso].[DimProduct] REBUILD;
ALTER INDEX ALL ON [cso].[DimProductCategory] REBUILD;
ALTER INDEX ALL ON [cso].[DimScenario] REBUILD;
ALTER INDEX ALL ON [cso].[DimPromotion] REBUILD;
ALTER INDEX ALL ON [cso].[DimProductSubcategory] REBUILD;
ALTER INDEX ALL ON [cso].[DimSalesTerritory] REBUILD;
ALTER INDEX ALL ON [cso].[DimStore] REBUILD;
ALTER INDEX ALL ON [cso].[FactITMachine] REBUILD;
ALTER INDEX ALL ON [cso].[FactITSLA] REBUILD;
ALTER INDEX ALL ON [cso].[FactInventory] REBUILD;
ALTER INDEX ALL ON [cso].[FactOnlineSales] REBUILD;
ALTER INDEX ALL ON [cso].[FactSales] REBUILD;
ALTER INDEX ALL ON [cso].[FactSalesQuota] REBUILD;
ALTER INDEX ALL ON [cso].[FactExchangeRate] REBUILD;
To see how many rows are compressed in a columnstore index, head over to the manage columnstore indexes article.
6. Optimize statistics
It is best to create single-column statistics immediately after a load. There are some choices for statistics. For example, if you create single-column statistics on every column it might take a long time to rebuild statistics. If you know certain columns are not going to be in query predicates, you could skip creating statistics on those columns.
If you decide to create single-column statistics on every column, you can use stored procedure code sample prc_sqldw_create_stats in the statistics article.
This example is a good starting point for creating statistics. It creates single-column statistics on each column in the dimension table, and on each joining column in the fact tables. You can always add single or multi-column statistics to other fact table columns later on.
Again this script is quite long.
CREATE STATISTICS [stat_cso_DimMachine_DecommissionDate] ON [cso].[DimMachine]([DecommissionDate]);
CREATE STATISTICS [stat_cso_DimMachine_ETLLoadID] ON [cso].[DimMachine]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimMachine_LastModifiedDate] ON [cso].[DimMachine]([LastModifiedDate]);
CREATE STATISTICS [stat_cso_DimMachine_LoadDate] ON [cso].[DimMachine]([LoadDate]);
CREATE STATISTICS [stat_cso_DimMachine_MachineDescription] ON [cso].[DimMachine]([MachineDescription]);
CREATE STATISTICS [stat_cso_DimMachine_MachineHardware] ON [cso].[DimMachine]([MachineHardware]);
CREATE STATISTICS [stat_cso_DimMachine_MachineKey] ON [cso].[DimMachine]([MachineKey]);
CREATE STATISTICS [stat_cso_DimMachine_MachineLabel] ON [cso].[DimMachine]([MachineLabel]);
CREATE STATISTICS [stat_cso_DimMachine_MachineName] ON [cso].[DimMachine]([MachineName]);
CREATE STATISTICS [stat_cso_DimMachine_MachineOS] ON [cso].[DimMachine]([MachineOS]);
CREATE STATISTICS [stat_cso_DimMachine_MachineSoftware] ON [cso].[DimMachine]([MachineSoftware]);
CREATE STATISTICS [stat_cso_DimMachine_MachineSource] ON [cso].[DimMachine]([MachineSource]);
CREATE STATISTICS [stat_cso_DimMachine_MachineType] ON [cso].[DimMachine]([MachineType]);
CREATE STATISTICS [stat_cso_DimMachine_ServiceStartDate] ON [cso].[DimMachine]([ServiceStartDate]);
CREATE STATISTICS [stat_cso_DimMachine_Status] ON [cso].[DimMachine]([Status]);
CREATE STATISTICS [stat_cso_DimMachine_StoreKey] ON [cso].[DimMachine]([StoreKey]);
CREATE STATISTICS [stat_cso_DimMachine_UpdateDate] ON [cso].[DimMachine]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimMachine_VendorName] ON [cso].[DimMachine]([VendorName]);
CREATE STATISTICS [stat_cso_DimOutage_ETLLoadID] ON [cso].[DimOutage]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimOutage_LoadDate] ON [cso].[DimOutage]([LoadDate]);
CREATE STATISTICS [stat_cso_DimOutage_OutageDescription] ON [cso].[DimOutage]([OutageDescription]);
CREATE STATISTICS [stat_cso_DimOutage_OutageKey] ON [cso].[DimOutage]([OutageKey]);
CREATE STATISTICS [stat_cso_DimOutage_OutageLabel] ON [cso].[DimOutage]([OutageLabel]);
CREATE STATISTICS [stat_cso_DimOutage_OutageName] ON [cso].[DimOutage]([OutageName]);
CREATE STATISTICS [stat_cso_DimOutage_OutageSubType] ON [cso].[DimOutage]([OutageSubType]);
CREATE STATISTICS [stat_cso_DimOutage_OutageSubTypeDescription] ON [cso].[DimOutage]([OutageSubTypeDescription]);
CREATE STATISTICS [stat_cso_DimOutage_OutageType] ON [cso].[DimOutage]([OutageType]);
CREATE STATISTICS [stat_cso_DimOutage_OutageTypeDescription] ON [cso].[DimOutage]([OutageTypeDescription]);
CREATE STATISTICS [stat_cso_DimOutage_UpdateDate] ON [cso].[DimOutage]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimProductCategory_ETLLoadID] ON [cso].[DimProductCategory]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimProductCategory_LoadDate] ON [cso].[DimProductCategory]([LoadDate]);
CREATE STATISTICS [stat_cso_DimProductCategory_ProductCategoryDescription] ON [cso].[DimProductCategory]([ProductCategoryDescription]);
CREATE STATISTICS [stat_cso_DimProductCategory_ProductCategoryKey] ON [cso].[DimProductCategory]([ProductCategoryKey]);
CREATE STATISTICS [stat_cso_DimProductCategory_ProductCategoryLabel] ON [cso].[DimProductCategory]([ProductCategoryLabel]);
CREATE STATISTICS [stat_cso_DimProductCategory_ProductCategoryName] ON [cso].[DimProductCategory]([ProductCategoryName]);
CREATE STATISTICS [stat_cso_DimProductCategory_UpdateDate] ON [cso].[DimProductCategory]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimScenario_ETLLoadID] ON [cso].[DimScenario]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimScenario_LoadDate] ON [cso].[DimScenario]([LoadDate]);
CREATE STATISTICS [stat_cso_DimScenario_ScenarioDescription] ON [cso].[DimScenario]([ScenarioDescription]);
CREATE STATISTICS [stat_cso_DimScenario_ScenarioKey] ON [cso].[DimScenario]([ScenarioKey]);
CREATE STATISTICS [stat_cso_DimScenario_ScenarioLabel] ON [cso].[DimScenario]([ScenarioLabel]);
CREATE STATISTICS [stat_cso_DimScenario_ScenarioName] ON [cso].[DimScenario]([ScenarioName]);
CREATE STATISTICS [stat_cso_DimScenario_UpdateDate] ON [cso].[DimScenario]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimPromotion_DiscountPercent] ON [cso].[DimPromotion]([DiscountPercent]);
CREATE STATISTICS [stat_cso_DimPromotion_EndDate] ON [cso].[DimPromotion]([EndDate]);
CREATE STATISTICS [stat_cso_DimPromotion_ETLLoadID] ON [cso].[DimPromotion]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimPromotion_LoadDate] ON [cso].[DimPromotion]([LoadDate]);
CREATE STATISTICS [stat_cso_DimPromotion_MaxQuantity] ON [cso].[DimPromotion]([MaxQuantity]);
CREATE STATISTICS [stat_cso_DimPromotion_MinQuantity] ON [cso].[DimPromotion]([MinQuantity]);
CREATE STATISTICS [stat_cso_DimPromotion_PromotionCategory] ON [cso].[DimPromotion]([PromotionCategory]);
CREATE STATISTICS [stat_cso_DimPromotion_PromotionDescription] ON [cso].[DimPromotion]([PromotionDescription]);
CREATE STATISTICS [stat_cso_DimPromotion_PromotionKey] ON [cso].[DimPromotion]([PromotionKey]);
CREATE STATISTICS [stat_cso_DimPromotion_PromotionLabel] ON [cso].[DimPromotion]([PromotionLabel]);
CREATE STATISTICS [stat_cso_DimPromotion_PromotionName] ON [cso].[DimPromotion]([PromotionName]);
CREATE STATISTICS [stat_cso_DimPromotion_PromotionType] ON [cso].[DimPromotion]([PromotionType]);
CREATE STATISTICS [stat_cso_DimPromotion_StartDate] ON [cso].[DimPromotion]([StartDate]);
CREATE STATISTICS [stat_cso_DimPromotion_UpdateDate] ON [cso].[DimPromotion]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_EndDate] ON [cso].[DimSalesTerritory]([EndDate]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_ETLLoadID] ON [cso].[DimSalesTerritory]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_GeographyKey] ON [cso].[DimSalesTerritory]([GeographyKey]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_LoadDate] ON [cso].[DimSalesTerritory]([LoadDate]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_SalesTerritoryCountry] ON [cso].[DimSalesTerritory]([SalesTerritoryCountry]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_SalesTerritoryGroup] ON [cso].[DimSalesTerritory]([SalesTerritoryGroup]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_SalesTerritoryKey] ON [cso].[DimSalesTerritory]([SalesTerritoryKey]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_SalesTerritoryLabel] ON [cso].[DimSalesTerritory]([SalesTerritoryLabel]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_SalesTerritoryLevel] ON [cso].[DimSalesTerritory]([SalesTerritoryLevel]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_SalesTerritoryManager] ON [cso].[DimSalesTerritory]([SalesTerritoryManager]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_SalesTerritoryName] ON [cso].[DimSalesTerritory]([SalesTerritoryName]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_SalesTerritoryRegion] ON [cso].[DimSalesTerritory]([SalesTerritoryRegion]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_StartDate] ON [cso].[DimSalesTerritory]([StartDate]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_Status] ON [cso].[DimSalesTerritory]([Status]);
CREATE STATISTICS [stat_cso_DimSalesTerritory_UpdateDate] ON [cso].[DimSalesTerritory]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimProductSubcategory_ETLLoadID] ON [cso].[DimProductSubcategory]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimProductSubcategory_LoadDate] ON [cso].[DimProductSubcategory]([LoadDate]);
CREATE STATISTICS [stat_cso_DimProductSubcategory_ProductCategoryKey] ON [cso].[DimProductSubcategory]([ProductCategoryKey]);
CREATE STATISTICS [stat_cso_DimProductSubcategory_ProductSubcategoryDescription] ON [cso].[DimProductSubcategory]([ProductSubcategoryDescription]);
CREATE STATISTICS [stat_cso_DimProductSubcategory_ProductSubcategoryKey] ON [cso].[DimProductSubcategory]([ProductSubcategoryKey]);
CREATE STATISTICS [stat_cso_DimProductSubcategory_ProductSubcategoryLabel] ON [cso].[DimProductSubcategory]([ProductSubcategoryLabel]);
CREATE STATISTICS [stat_cso_DimProductSubcategory_ProductSubcategoryName] ON [cso].[DimProductSubcategory]([ProductSubcategoryName]);
CREATE STATISTICS [stat_cso_DimProductSubcategory_UpdateDate] ON [cso].[DimProductSubcategory]([UpdateDate]);
CREATE STATISTICS [stat_cso_FactITMachine_Datekey] ON [cso].[FactITMachine]([Datekey]);
CREATE STATISTICS [stat_cso_FactITMachine_ITMachinekey] ON [cso].[FactITMachine]([ITMachinekey]);
CREATE STATISTICS [stat_cso_FactITMachine_MachineKey] ON [cso].[FactITMachine]([MachineKey]);
CREATE STATISTICS [stat_cso_FactInventory_CurrencyKey] ON [cso].[FactInventory]([CurrencyKey]);
CREATE STATISTICS [stat_cso_FactInventory_DateKey] ON [cso].[FactInventory]([DateKey]);
CREATE STATISTICS [stat_cso_FactInventory_InventoryKey] ON [cso].[FactInventory]([InventoryKey]);
CREATE STATISTICS [stat_cso_FactInventory_ProductKey] ON [cso].[FactInventory]([ProductKey]);
CREATE STATISTICS [stat_cso_FactInventory_StoreKey] ON [cso].[FactInventory]([StoreKey]);
CREATE STATISTICS [stat_cso_FactStrategyPlan_AccountKey] ON [cso].[FactStrategyPlan]([AccountKey]);
CREATE STATISTICS [stat_cso_FactStrategyPlan_CurrencyKey] ON [cso].[FactStrategyPlan]([CurrencyKey]);
CREATE STATISTICS [stat_cso_FactStrategyPlan_Datekey] ON [cso].[FactStrategyPlan]([Datekey]);
CREATE STATISTICS [stat_cso_FactStrategyPlan_EntityKey] ON [cso].[FactStrategyPlan]([EntityKey]);
CREATE STATISTICS [stat_cso_FactStrategyPlan_ProductCategoryKey] ON [cso].[FactStrategyPlan]([ProductCategoryKey]);
CREATE STATISTICS [stat_cso_FactStrategyPlan_ScenarioKey] ON [cso].[FactStrategyPlan]([ScenarioKey]);
CREATE STATISTICS [stat_cso_FactStrategyPlan_StrategyPlanKey] ON [cso].[FactStrategyPlan]([StrategyPlanKey]);
CREATE STATISTICS [stat_cso_FactSalesQuota_ChannelKey] ON [cso].[FactSalesQuota]([ChannelKey]);
CREATE STATISTICS [stat_cso_FactSalesQuota_CurrencyKey] ON [cso].[FactSalesQuota]([CurrencyKey]);
CREATE STATISTICS [stat_cso_FactSalesQuota_DateKey] ON [cso].[FactSalesQuota]([DateKey]);
CREATE STATISTICS [stat_cso_FactSalesQuota_ProductKey] ON [cso].[FactSalesQuota]([ProductKey]);
CREATE STATISTICS [stat_cso_FactSalesQuota_SalesQuotaKey] ON [cso].[FactSalesQuota]([SalesQuotaKey]);
CREATE STATISTICS [stat_cso_FactSalesQuota_ScenarioKey] ON [cso].[FactSalesQuota]([ScenarioKey]);
CREATE STATISTICS [stat_cso_FactSalesQuota_StoreKey] ON [cso].[FactSalesQuota]([StoreKey]);
CREATE STATISTICS [stat_cso_FactSales_channelKey] ON [cso].[FactSales]([channelKey]);
CREATE STATISTICS [stat_cso_FactSales_CurrencyKey] ON [cso].[FactSales]([CurrencyKey]);
CREATE STATISTICS [stat_cso_FactSales_DateKey] ON [cso].[FactSales]([DateKey]);
CREATE STATISTICS [stat_cso_FactSales_ProductKey] ON [cso].[FactSales]([ProductKey]);
CREATE STATISTICS [stat_cso_FactSales_PromotionKey] ON [cso].[FactSales]([PromotionKey]);
CREATE STATISTICS [stat_cso_FactSales_SalesKey] ON [cso].[FactSales]([SalesKey]);
CREATE STATISTICS [stat_cso_FactSales_StoreKey] ON [cso].[FactSales]([StoreKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_CurrencyKey] ON [cso].[FactOnlineSales]([CurrencyKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_CustomerKey] ON [cso].[FactOnlineSales]([CustomerKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_DateKey] ON [cso].[FactOnlineSales]([DateKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_OnlineSalesKey] ON [cso].[FactOnlineSales]([OnlineSalesKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_ProductKey] ON [cso].[FactOnlineSales]([ProductKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_PromotionKey] ON [cso].[FactOnlineSales]([PromotionKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_StoreKey] ON [cso].[FactOnlineSales]([StoreKey]);
CREATE STATISTICS [stat_cso_DimCustomer_AddressLine1] ON [cso].[DimCustomer]([AddressLine1]);
CREATE STATISTICS [stat_cso_DimCustomer_AddressLine2] ON [cso].[DimCustomer]([AddressLine2]);
CREATE STATISTICS [stat_cso_DimCustomer_BirthDate] ON [cso].[DimCustomer]([BirthDate]);
CREATE STATISTICS [stat_cso_DimCustomer_CompanyName] ON [cso].[DimCustomer]([CompanyName]);
CREATE STATISTICS [stat_cso_DimCustomer_CustomerKey] ON [cso].[DimCustomer]([CustomerKey]);
CREATE STATISTICS [stat_cso_DimCustomer_CustomerLabel] ON [cso].[DimCustomer]([CustomerLabel]);
CREATE STATISTICS [stat_cso_DimCustomer_CustomerType] ON [cso].[DimCustomer]([CustomerType]);
CREATE STATISTICS [stat_cso_DimCustomer_DateFirstPurchase] ON [cso].[DimCustomer]([DateFirstPurchase]);
CREATE STATISTICS [stat_cso_DimCustomer_Education] ON [cso].[DimCustomer]([Education]);
CREATE STATISTICS [stat_cso_DimCustomer_EmailAddress] ON [cso].[DimCustomer]([EmailAddress]);
CREATE STATISTICS [stat_cso_DimCustomer_ETLLoadID] ON [cso].[DimCustomer]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimCustomer_FirstName] ON [cso].[DimCustomer]([FirstName]);
CREATE STATISTICS [stat_cso_DimCustomer_Gender] ON [cso].[DimCustomer]([Gender]);
CREATE STATISTICS [stat_cso_DimCustomer_GeographyKey] ON [cso].[DimCustomer]([GeographyKey]);
CREATE STATISTICS [stat_cso_DimCustomer_HouseOwnerFlag] ON [cso].[DimCustomer]([HouseOwnerFlag]);
CREATE STATISTICS [stat_cso_DimCustomer_LastName] ON [cso].[DimCustomer]([LastName]);
CREATE STATISTICS [stat_cso_DimCustomer_LoadDate] ON [cso].[DimCustomer]([LoadDate]);
CREATE STATISTICS [stat_cso_DimCustomer_MaritalStatus] ON [cso].[DimCustomer]([MaritalStatus]);
CREATE STATISTICS [stat_cso_DimCustomer_MiddleName] ON [cso].[DimCustomer]([MiddleName]);
CREATE STATISTICS [stat_cso_DimCustomer_NameStyle] ON [cso].[DimCustomer]([NameStyle]);
CREATE STATISTICS [stat_cso_DimCustomer_NumberCarsOwned] ON [cso].[DimCustomer]([NumberCarsOwned]);
CREATE STATISTICS [stat_cso_DimCustomer_NumberChildrenAtHome] ON [cso].[DimCustomer]([NumberChildrenAtHome]);
CREATE STATISTICS [stat_cso_DimCustomer_Occupation] ON [cso].[DimCustomer]([Occupation]);
CREATE STATISTICS [stat_cso_DimCustomer_Phone] ON [cso].[DimCustomer]([Phone]);
CREATE STATISTICS [stat_cso_DimCustomer_Suffix] ON [cso].[DimCustomer]([Suffix]);
CREATE STATISTICS [stat_cso_DimCustomer_Title] ON [cso].[DimCustomer]([Title]);
CREATE STATISTICS [stat_cso_DimCustomer_TotalChildren] ON [cso].[DimCustomer]([TotalChildren]);
CREATE STATISTICS [stat_cso_DimCustomer_UpdateDate] ON [cso].[DimCustomer]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimCustomer_YearlyIncome] ON [cso].[DimCustomer]([YearlyIncome]);
CREATE STATISTICS [stat_cso_DimEmployee_BaseRate] ON [cso].[DimEmployee]([BaseRate]);
CREATE STATISTICS [stat_cso_DimEmployee_BirthDate] ON [cso].[DimEmployee]([BirthDate]);
CREATE STATISTICS [stat_cso_DimEmployee_CurrentFlag] ON [cso].[DimEmployee]([CurrentFlag]);
CREATE STATISTICS [stat_cso_DimEmployee_DepartmentName] ON [cso].[DimEmployee]([DepartmentName]);
CREATE STATISTICS [stat_cso_DimEmployee_EmailAddress] ON [cso].[DimEmployee]([EmailAddress]);
CREATE STATISTICS [stat_cso_DimEmployee_EmergencyContactName] ON [cso].[DimEmployee]([EmergencyContactName]);
CREATE STATISTICS [stat_cso_DimEmployee_EmergencyContactPhone] ON [cso].[DimEmployee]([EmergencyContactPhone]);
CREATE STATISTICS [stat_cso_DimEmployee_EmployeeKey] ON [cso].[DimEmployee]([EmployeeKey]);
CREATE STATISTICS [stat_cso_DimEmployee_EndDate] ON [cso].[DimEmployee]([EndDate]);
CREATE STATISTICS [stat_cso_DimEmployee_ETLLoadID] ON [cso].[DimEmployee]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimEmployee_FirstName] ON [cso].[DimEmployee]([FirstName]);
CREATE STATISTICS [stat_cso_DimEmployee_Gender] ON [cso].[DimEmployee]([Gender]);
CREATE STATISTICS [stat_cso_DimEmployee_HireDate] ON [cso].[DimEmployee]([HireDate]);
CREATE STATISTICS [stat_cso_DimEmployee_LastName] ON [cso].[DimEmployee]([LastName]);
CREATE STATISTICS [stat_cso_DimEmployee_LoadDate] ON [cso].[DimEmployee]([LoadDate]);
CREATE STATISTICS [stat_cso_DimEmployee_MaritalStatus] ON [cso].[DimEmployee]([MaritalStatus]);
CREATE STATISTICS [stat_cso_DimEmployee_MiddleName] ON [cso].[DimEmployee]([MiddleName]);
CREATE STATISTICS [stat_cso_DimEmployee_ParentEmployeeKey] ON [cso].[DimEmployee]([ParentEmployeeKey]);
CREATE STATISTICS [stat_cso_DimEmployee_PayFrequency] ON [cso].[DimEmployee]([PayFrequency]);
CREATE STATISTICS [stat_cso_DimEmployee_Phone] ON [cso].[DimEmployee]([Phone]);
CREATE STATISTICS [stat_cso_DimEmployee_SalariedFlag] ON [cso].[DimEmployee]([SalariedFlag]);
CREATE STATISTICS [stat_cso_DimEmployee_SalesPersonFlag] ON [cso].[DimEmployee]([SalesPersonFlag]);
CREATE STATISTICS [stat_cso_DimEmployee_StartDate] ON [cso].[DimEmployee]([StartDate]);
CREATE STATISTICS [stat_cso_DimEmployee_Status] ON [cso].[DimEmployee]([Status]);
CREATE STATISTICS [stat_cso_DimEmployee_Title] ON [cso].[DimEmployee]([Title]);
CREATE STATISTICS [stat_cso_DimEmployee_UpdateDate] ON [cso].[DimEmployee]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimEmployee_VacationHours] ON [cso].[DimEmployee]([VacationHours]);
CREATE STATISTICS [stat_cso_DimEntity_EndDate] ON [cso].[DimEntity]([EndDate]);
CREATE STATISTICS [stat_cso_DimEntity_EntityDescription] ON [cso].[DimEntity]([EntityDescription]);
CREATE STATISTICS [stat_cso_DimEntity_EntityKey] ON [cso].[DimEntity]([EntityKey]);
CREATE STATISTICS [stat_cso_DimEntity_EntityLabel] ON [cso].[DimEntity]([EntityLabel]);
CREATE STATISTICS [stat_cso_DimEntity_EntityName] ON [cso].[DimEntity]([EntityName]);
CREATE STATISTICS [stat_cso_DimEntity_EntityType] ON [cso].[DimEntity]([EntityType]);
CREATE STATISTICS [stat_cso_DimEntity_ETLLoadID] ON [cso].[DimEntity]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimEntity_LoadDate] ON [cso].[DimEntity]([LoadDate]);
CREATE STATISTICS [stat_cso_DimEntity_ParentEntityKey] ON [cso].[DimEntity]([ParentEntityKey]);
CREATE STATISTICS [stat_cso_DimEntity_ParentEntityLabel] ON [cso].[DimEntity]([ParentEntityLabel]);
CREATE STATISTICS [stat_cso_DimEntity_StartDate] ON [cso].[DimEntity]([StartDate]);
CREATE STATISTICS [stat_cso_DimEntity_Status] ON [cso].[DimEntity]([Status]);
CREATE STATISTICS [stat_cso_DimEntity_UpdateDate] ON [cso].[DimEntity]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimProduct_AvailableForSaleDate] ON [cso].[DimProduct]([AvailableForSaleDate]);
CREATE STATISTICS [stat_cso_DimProduct_BrandName] ON [cso].[DimProduct]([BrandName]);
CREATE STATISTICS [stat_cso_DimProduct_ClassID] ON [cso].[DimProduct]([ClassID]);
CREATE STATISTICS [stat_cso_DimProduct_ClassName] ON [cso].[DimProduct]([ClassName]);
CREATE STATISTICS [stat_cso_DimProduct_ColorID] ON [cso].[DimProduct]([ColorID]);
CREATE STATISTICS [stat_cso_DimProduct_ColorName] ON [cso].[DimProduct]([ColorName]);
CREATE STATISTICS [stat_cso_DimProduct_ETLLoadID] ON [cso].[DimProduct]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimProduct_ImageURL] ON [cso].[DimProduct]([ImageURL]);
CREATE STATISTICS [stat_cso_DimProduct_LoadDate] ON [cso].[DimProduct]([LoadDate]);
CREATE STATISTICS [stat_cso_DimProduct_Manufacturer] ON [cso].[DimProduct]([Manufacturer]);
CREATE STATISTICS [stat_cso_DimProduct_ProductDescription] ON [cso].[DimProduct]([ProductDescription]);
CREATE STATISTICS [stat_cso_DimProduct_ProductKey] ON [cso].[DimProduct]([ProductKey]);
CREATE STATISTICS [stat_cso_DimProduct_ProductLabel] ON [cso].[DimProduct]([ProductLabel]);
CREATE STATISTICS [stat_cso_DimProduct_ProductName] ON [cso].[DimProduct]([ProductName]);
CREATE STATISTICS [stat_cso_DimProduct_ProductSubcategoryKey] ON [cso].[DimProduct]([ProductSubcategoryKey]);
CREATE STATISTICS [stat_cso_DimProduct_ProductURL] ON [cso].[DimProduct]([ProductURL]);
CREATE STATISTICS [stat_cso_DimProduct_Size] ON [cso].[DimProduct]([Size]);
CREATE STATISTICS [stat_cso_DimProduct_SizeRange] ON [cso].[DimProduct]([SizeRange]);
CREATE STATISTICS [stat_cso_DimProduct_SizeUnitMeasureID] ON [cso].[DimProduct]([SizeUnitMeasureID]);
CREATE STATISTICS [stat_cso_DimProduct_Status] ON [cso].[DimProduct]([Status]);
CREATE STATISTICS [stat_cso_DimProduct_StockTypeID] ON [cso].[DimProduct]([StockTypeID]);
CREATE STATISTICS [stat_cso_DimProduct_StockTypeName] ON [cso].[DimProduct]([StockTypeName]);
CREATE STATISTICS [stat_cso_DimProduct_StopSaleDate] ON [cso].[DimProduct]([StopSaleDate]);
CREATE STATISTICS [stat_cso_DimProduct_StyleID] ON [cso].[DimProduct]([StyleID]);
CREATE STATISTICS [stat_cso_DimProduct_StyleName] ON [cso].[DimProduct]([StyleName]);
CREATE STATISTICS [stat_cso_DimProduct_UnitCost] ON [cso].[DimProduct]([UnitCost]);
CREATE STATISTICS [stat_cso_DimProduct_UnitOfMeasureID] ON [cso].[DimProduct]([UnitOfMeasureID]);
CREATE STATISTICS [stat_cso_DimProduct_UnitOfMeasureName] ON [cso].[DimProduct]([UnitOfMeasureName]);
CREATE STATISTICS [stat_cso_DimProduct_UnitPrice] ON [cso].[DimProduct]([UnitPrice]);
CREATE STATISTICS [stat_cso_DimProduct_UpdateDate] ON [cso].[DimProduct]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimProduct_Weight] ON [cso].[DimProduct]([Weight]);
CREATE STATISTICS [stat_cso_DimProduct_WeightUnitMeasureID] ON [cso].[DimProduct]([WeightUnitMeasureID]);
CREATE STATISTICS [stat_cso_DimAccount_AccountDescription] ON [cso].[DimAccount]([AccountDescription]);
CREATE STATISTICS [stat_cso_DimAccount_AccountKey] ON [cso].[DimAccount]([AccountKey]);
CREATE STATISTICS [stat_cso_DimAccount_AccountLabel] ON [cso].[DimAccount]([AccountLabel]);
CREATE STATISTICS [stat_cso_DimAccount_AccountName] ON [cso].[DimAccount]([AccountName]);
CREATE STATISTICS [stat_cso_DimAccount_AccountType] ON [cso].[DimAccount]([AccountType]);
CREATE STATISTICS [stat_cso_DimAccount_CustomMemberOptions] ON [cso].[DimAccount]([CustomMemberOptions]);
CREATE STATISTICS [stat_cso_DimAccount_CustomMembers] ON [cso].[DimAccount]([CustomMembers]);
CREATE STATISTICS [stat_cso_DimAccount_ETLLoadID] ON [cso].[DimAccount]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimAccount_LoadDate] ON [cso].[DimAccount]([LoadDate]);
CREATE STATISTICS [stat_cso_DimAccount_Operator] ON [cso].[DimAccount]([Operator]);
CREATE STATISTICS [stat_cso_DimAccount_ParentAccountKey] ON [cso].[DimAccount]([ParentAccountKey]);
CREATE STATISTICS [stat_cso_DimAccount_UpdateDate] ON [cso].[DimAccount]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimAccount_ValueType] ON [cso].[DimAccount]([ValueType]);
CREATE STATISTICS [stat_cso_DimChannel_ChannelDescription] ON [cso].[DimChannel]([ChannelDescription]);
CREATE STATISTICS [stat_cso_DimChannel_ChannelKey] ON [cso].[DimChannel]([ChannelKey]);
CREATE STATISTICS [stat_cso_DimChannel_ChannelLabel] ON [cso].[DimChannel]([ChannelLabel]);
CREATE STATISTICS [stat_cso_DimChannel_ChannelName] ON [cso].[DimChannel]([ChannelName]);
CREATE STATISTICS [stat_cso_DimChannel_ETLLoadID] ON [cso].[DimChannel]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimChannel_LoadDate] ON [cso].[DimChannel]([LoadDate]);
CREATE STATISTICS [stat_cso_DimChannel_UpdateDate] ON [cso].[DimChannel]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimCurrency_CurrencyDescription] ON [cso].[DimCurrency]([CurrencyDescription]);
CREATE STATISTICS [stat_cso_DimCurrency_CurrencyKey] ON [cso].[DimCurrency]([CurrencyKey]);
CREATE STATISTICS [stat_cso_DimCurrency_CurrencyLabel] ON [cso].[DimCurrency]([CurrencyLabel]);
CREATE STATISTICS [stat_cso_DimCurrency_CurrencyName] ON [cso].[DimCurrency]([CurrencyName]);
CREATE STATISTICS [stat_cso_DimCurrency_ETLLoadID] ON [cso].[DimCurrency]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimCurrency_LoadDate] ON [cso].[DimCurrency]([LoadDate]);
CREATE STATISTICS [stat_cso_DimCurrency_UpdateDate] ON [cso].[DimCurrency]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimDate_AsiaSeason] ON [cso].[DimDate]([AsiaSeason]);
CREATE STATISTICS [stat_cso_DimDate_CalendarDayOfWeek] ON [cso].[DimDate]([CalendarDayOfWeek]);
CREATE STATISTICS [stat_cso_DimDate_CalendarDayOfWeekLabel] ON [cso].[DimDate]([CalendarDayOfWeekLabel]);
CREATE STATISTICS [stat_cso_DimDate_CalendarHalfYear] ON [cso].[DimDate]([CalendarHalfYear]);
CREATE STATISTICS [stat_cso_DimDate_CalendarHalfYearLabel] ON [cso].[DimDate]([CalendarHalfYearLabel]);
CREATE STATISTICS [stat_cso_DimDate_CalendarMonth] ON [cso].[DimDate]([CalendarMonth]);
CREATE STATISTICS [stat_cso_DimDate_CalendarMonthLabel] ON [cso].[DimDate]([CalendarMonthLabel]);
CREATE STATISTICS [stat_cso_DimDate_CalendarQuarter] ON [cso].[DimDate]([CalendarQuarter]);
CREATE STATISTICS [stat_cso_DimDate_CalendarQuarterLabel] ON [cso].[DimDate]([CalendarQuarterLabel]);
CREATE STATISTICS [stat_cso_DimDate_CalendarWeek] ON [cso].[DimDate]([CalendarWeek]);
CREATE STATISTICS [stat_cso_DimDate_CalendarWeekLabel] ON [cso].[DimDate]([CalendarWeekLabel]);
CREATE STATISTICS [stat_cso_DimDate_CalendarYear] ON [cso].[DimDate]([CalendarYear]);
CREATE STATISTICS [stat_cso_DimDate_CalendarYearLabel] ON [cso].[DimDate]([CalendarYearLabel]);
CREATE STATISTICS [stat_cso_DimDate_DateDescription] ON [cso].[DimDate]([DateDescription]);
CREATE STATISTICS [stat_cso_DimDate_Datekey] ON [cso].[DimDate]([Datekey]);
CREATE STATISTICS [stat_cso_DimDate_EuropeSeason] ON [cso].[DimDate]([EuropeSeason]);
CREATE STATISTICS [stat_cso_DimDate_FiscalHalfYear] ON [cso].[DimDate]([FiscalHalfYear]);
CREATE STATISTICS [stat_cso_DimDate_FiscalHalfYearLabel] ON [cso].[DimDate]([FiscalHalfYearLabel]);
CREATE STATISTICS [stat_cso_DimDate_FiscalMonth] ON [cso].[DimDate]([FiscalMonth]);
CREATE STATISTICS [stat_cso_DimDate_FiscalMonthLabel] ON [cso].[DimDate]([FiscalMonthLabel]);
CREATE STATISTICS [stat_cso_DimDate_FiscalQuarter] ON [cso].[DimDate]([FiscalQuarter]);
CREATE STATISTICS [stat_cso_DimDate_FiscalQuarterLabel] ON [cso].[DimDate]([FiscalQuarterLabel]);
CREATE STATISTICS [stat_cso_DimDate_FiscalYear] ON [cso].[DimDate]([FiscalYear]);
CREATE STATISTICS [stat_cso_DimDate_FiscalYearLabel] ON [cso].[DimDate]([FiscalYearLabel]);
CREATE STATISTICS [stat_cso_DimDate_FullDateLabel] ON [cso].[DimDate]([FullDateLabel]);
CREATE STATISTICS [stat_cso_DimDate_HolidayName] ON [cso].[DimDate]([HolidayName]);
CREATE STATISTICS [stat_cso_DimDate_IsHoliday] ON [cso].[DimDate]([IsHoliday]);
CREATE STATISTICS [stat_cso_DimDate_IsWorkDay] ON [cso].[DimDate]([IsWorkDay]);
CREATE STATISTICS [stat_cso_DimDate_NorthAmericaSeason] ON [cso].[DimDate]([NorthAmericaSeason]);
CREATE STATISTICS [stat_cso_DimStore_AddressLine1] ON [cso].[DimStore]([AddressLine1]);
CREATE STATISTICS [stat_cso_DimStore_AddressLine2] ON [cso].[DimStore]([AddressLine2]);
CREATE STATISTICS [stat_cso_DimStore_CloseDate] ON [cso].[DimStore]([CloseDate]);
CREATE STATISTICS [stat_cso_DimStore_CloseReason] ON [cso].[DimStore]([CloseReason]);
CREATE STATISTICS [stat_cso_DimStore_EmployeeCount] ON [cso].[DimStore]([EmployeeCount]);
CREATE STATISTICS [stat_cso_DimStore_EntityKey] ON [cso].[DimStore]([EntityKey]);
CREATE STATISTICS [stat_cso_DimStore_ETLLoadID] ON [cso].[DimStore]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimStore_GeographyKey] ON [cso].[DimStore]([GeographyKey]);
CREATE STATISTICS [stat_cso_DimStore_GeoLocation] ON [cso].[DimStore]([GeoLocation]);
CREATE STATISTICS [stat_cso_DimStore_Geometry] ON [cso].[DimStore]([Geometry]);
CREATE STATISTICS [stat_cso_DimStore_LastRemodelDate] ON [cso].[DimStore]([LastRemodelDate]);
CREATE STATISTICS [stat_cso_DimStore_LoadDate] ON [cso].[DimStore]([LoadDate]);
CREATE STATISTICS [stat_cso_DimStore_OpenDate] ON [cso].[DimStore]([OpenDate]);
CREATE STATISTICS [stat_cso_DimStore_SellingAreaSize] ON [cso].[DimStore]([SellingAreaSize]);
CREATE STATISTICS [stat_cso_DimStore_Status] ON [cso].[DimStore]([Status]);
CREATE STATISTICS [stat_cso_DimStore_StoreDescription] ON [cso].[DimStore]([StoreDescription]);
CREATE STATISTICS [stat_cso_DimStore_StoreFax] ON [cso].[DimStore]([StoreFax]);
CREATE STATISTICS [stat_cso_DimStore_StoreKey] ON [cso].[DimStore]([StoreKey]);
CREATE STATISTICS [stat_cso_DimStore_StoreManager] ON [cso].[DimStore]([StoreManager]);
CREATE STATISTICS [stat_cso_DimStore_StoreName] ON [cso].[DimStore]([StoreName]);
CREATE STATISTICS [stat_cso_DimStore_StorePhone] ON [cso].[DimStore]([StorePhone]);
CREATE STATISTICS [stat_cso_DimStore_StoreType] ON [cso].[DimStore]([StoreType]);
CREATE STATISTICS [stat_cso_DimStore_UpdateDate] ON [cso].[DimStore]([UpdateDate]);
CREATE STATISTICS [stat_cso_DimStore_ZipCode] ON [cso].[DimStore]([ZipCode]);
CREATE STATISTICS [stat_cso_DimStore_ZipCodeExtension] ON [cso].[DimStore]([ZipCodeExtension]);
CREATE STATISTICS [stat_cso_DimGeography_CityName] ON [cso].[DimGeography]([CityName]);
CREATE STATISTICS [stat_cso_DimGeography_ContinentName] ON [cso].[DimGeography]([ContinentName]);
CREATE STATISTICS [stat_cso_DimGeography_ETLLoadID] ON [cso].[DimGeography]([ETLLoadID]);
CREATE STATISTICS [stat_cso_DimGeography_GeographyKey] ON [cso].[DimGeography]([GeographyKey]);
CREATE STATISTICS [stat_cso_DimGeography_GeographyType] ON [cso].[DimGeography]([GeographyType]);
CREATE STATISTICS [stat_cso_DimGeography_LoadDate] ON [cso].[DimGeography]([LoadDate]);
CREATE STATISTICS [stat_cso_DimGeography_RegionCountryName] ON [cso].[DimGeography]([RegionCountryName]);
CREATE STATISTICS [stat_cso_DimGeography_StateProvinceName] ON [cso].[DimGeography]([StateProvinceName]);
CREATE STATISTICS [stat_cso_DimGeography_UpdateDate] ON [cso].[DimGeography]([UpdateDate]);
CREATE STATISTICS [stat_cso_FactOnlineSales_CurrencyKey] ON [cso].[FactOnlineSales]([CurrencyKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_CustomerKey] ON [cso].[FactOnlineSales]([CustomerKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_DateKey] ON [cso].[FactOnlineSales]([DateKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_OnlineSalesKey] ON [cso].[FactOnlineSales]([OnlineSalesKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_ProductKey] ON [cso].[FactOnlineSales]([ProductKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_PromotionKey] ON [cso].[FactOnlineSales]([PromotionKey]);
CREATE STATISTICS [stat_cso_FactOnlineSales_StoreKey] ON [cso].[FactOnlineSales]([StoreKey]);
Achievement unlocked!
You now have all the public data loaded into Azure SQL Data Warehouse. Great job!
You can now start querying the tables using queries like this. :
SELECT SUM(f.[SalesAmount]) AS [sales_by_brand_amount]
, p.[BrandName]
FROM [cso].[FactOnlineSales] AS f
JOIN [cso].[DimProduct] AS p ON f.[ProductKey] = p.[ProductKey]
GROUP BY p.[BrandName]
Enjoy exploring with SQL Data Warehouse.
Next steps
For more development tips, see SQL Data Warehouse development overview.