Kurz: Načtení dat do fondu SQL služby Azure Synapse Analytics
Tento kurz používá PolyBase k načtení datového skladu WideWorldImportersDW z úložiště objektů blob v Azure do datového skladu ve fondu SQL služby Azure Synapse Analytics. Tento kurz používá Azure Portal a aplikaci SQL Server Management Studio (SSMS) k:
- Vytvoření vyhrazeného uživatele pro načítání dat
- Vytvoření externích tabulek, které jako zdroj dat používají objekt blob Azure
- Načtení dat do datového skladu pomocí příkazu T-SQL CTAS
- Zobrazení průběhu nahrávání dat
- Vygenerování ročního objemu dat v tabulce dimenzí Date a tabulce faktů Sales
- Vytvoření statistik pro nově načtená data
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Než začnete
Než začnete s tímto kurzem, stáhněte a nainstalujte nejnovější verzi aplikace SQL Server Management Studio (SSMS).
V tomto kurzu se předpokládá, že jste už vytvořili vyhrazený fond SQL z následujícího kurzu.
Poznámka:
Pro účely tohoto kurzu se doporučuje použít alespoň dw1000c.
Vytvoření uživatele pro načítání dat
Účet správce serveru slouží k provádění operací správy a není vhodný pro spouštění dotazů na uživatelská data. Načítání dat je operace s vysokými nároky na paměť. Maximální počet paměti se definuje podle generace fondu SQL, který používáte, jednotek datového skladu a třídy prostředků.
Doporučujeme vytvořit účet a uživatele vyhrazeného pro načítání dat. Pak přidejte uživatele načítání do třídy prostředků, která umožňuje odpovídající maximální přidělení paměti.
Vzhledem k tomu, že jste aktuálně připojeni jako správce serveru, můžete vytvářet účty a uživatele. Pomocí následujících kroků vytvořte účet a uživatele LoaderRC60. Pak uživatele přiřaďte k třídě prostředků staticrc60.
V SSMS kliknutím pravým tlačítkem na uzel master zobrazte rozevírací nabídku a zvolte Nový dotaz. Otevře se nové okno dotazu.
V okně dotazu zadejte následující příkazy T-SQL, které vytvoří účet a uživatele LoaderRC60, a heslo a123STRONGpassword! nahraďte vlastním heslem.
CREATE LOGIN LoaderRC60 WITH PASSWORD = 'a123STRONGpassword!'; CREATE USER LoaderRC60 FOR LOGIN LoaderRC60;
Klikněte na tlačítko Spustit.
Klikněte pravým tlačítkem na SampleDW a zvolte Nový dotaz. Otevře se nové okno dotazu.
Zadejte následující příkazy T-SQL, které pro účet LoaderRC60 vytvoří uživatele databáze LoaderRC60. Na druhém řádku se novému uživateli přidělí oprávnění CONTROL k novému datovému skladu. Tato oprávnění jsou podobná, jako kdybyste z uživatele udělali vlastníka databáze. Třetí řádek přidá nového uživatele jako člena
staticrc60
třídy prostředků.CREATE USER LoaderRC60 FOR LOGIN LoaderRC60; GRANT CONTROL ON DATABASE::[SampleDW] to LoaderRC60; EXEC sp_addrolemember 'staticrc60', 'LoaderRC60';
Klikněte na tlačítko Spustit.
Připojení k serveru jako uživatel načítání
Prvním krokem k načítání dat je přihlášení jako LoaderRC60.
V Průzkumníku objektů klikněte na rozevírací nabídku Připojit a vyberte Databázový stroj. Zobrazí se dialogové okno Připojení k serveru.
Zadejte plně kvalifikovaný název serveru a jako Účet zadejte LoaderRC60. Zadejte své heslo k účtu LoaderRC60.
Klepněte na tlačítko Připojit.
Až bude vaše připojení připravené, v Průzkumníku objektů se zobrazí dvě připojení k serveru. Jedno připojení jako ServerAdmin a druhé jako LoaderRC60.
Vytvoření externích tabulek a objektů
Teď jste připraveni zahájit proces načítání dat do svého nového datového skladu. Další informace o tom, jak získat data do služby Azure Blob Storage nebo je načíst přímo ze zdroje do fondu SQL, najdete v přehledu načítání.
Spuštěním následujících skriptů SQL zadejte informace o datech, která chcete načíst. Tyto informace zahrnují umístění dat, formát obsahu dat a definici tabulky pro data. Data se nacházejí v globálním objektu blob Azure.
V předchozí části jste se do svého datového skladu přihlásili jako LoaderRC60. V aplikaci SSMS klikněte pravým tlačítkem na SampleDW v rámci připojení LoaderRC60 a vyberte Nový dotaz. Zobrazí se nové okno dotazu.
Porovnejte své okno dotazu s předchozím obrázkem. Ověřte, že je vaše okno dotazu spuštěné pod účtem LoaderRC60 a provádí dotazy na vaši databázi SampleDW. Toto okno dotazu použijte k provedení všech kroků načítání.
Vytvořte hlavní klíč pro databázi SampleDW. Pro každou databázi je nutné vytvořit hlavní klíč pouze jednou.
CREATE MASTER KEY;
Spuštěním následujícího příkazu CREATE EXTERNAL DATA SOURCE definujte umístění objektu blob v Azure. Jedná se o umístění údajů externích dovozců po celém světě. Pokud chcete spustit příkaz, který jste připojili k oknu dotazu, zvýrazněte příkazy, které chcete spustit, a klikněte na Provést.
CREATE EXTERNAL DATA SOURCE WWIStorage WITH ( TYPE = Hadoop, LOCATION = 'wasbs://wideworldimporters@sqldwholdata.blob.core.windows.net' );
Spuštěním následujícího příkazu T-SQL CREATE EXTERNAL FILE FORMAT určete charakteristiky a možnosti formátování pro externí datový soubor. Tento příkaz určuje, že jsou externí data uložená jako text a hodnoty jsou oddělené znakem roury („|“).
CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = FALSE ) );
Spuštěním následujících příkazů CREATE SCHEMA vytvořte schéma pro formát vašeho externího souboru. Schéma ext představuje způsob uspořádání externích tabulek, které se chystáte vytvořit. Schéma wwi uspořádá standardní tabulky, které budou obsahovat data.
CREATE SCHEMA ext; GO CREATE SCHEMA wwi;
Vytvořte externí tabulky. Definice tabulek jsou uloženy v databázi, ale tabulky odkazují na data uložená v úložišti objektů blob v Azure. Spuštěním následujících příkazů T-SQL vytvořte několik externích tabulek odkazujících na objekt blob Azure, který jste dříve definovali v externím zdroji dat.
CREATE EXTERNAL TABLE [ext].[dimension_City]( [City Key] [int] NOT NULL, [WWI City ID] [int] NOT NULL, [City] [nvarchar](50) NOT NULL, [State Province] [nvarchar](50) NOT NULL, [Country] [nvarchar](60) NOT NULL, [Continent] [nvarchar](30) NOT NULL, [Sales Territory] [nvarchar](50) NOT NULL, [Region] [nvarchar](30) NOT NULL, [Subregion] [nvarchar](30) NOT NULL, [Location] [nvarchar](76) NULL, [Latest Recorded Population] [bigint] NOT NULL, [Valid From] [datetime2](7) NOT NULL, [Valid To] [datetime2](7) NOT NULL, [Lineage Key] [int] NOT NULL ) WITH (LOCATION='/v1/dimension_City/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[dimension_Customer] ( [Customer Key] [int] NOT NULL, [WWI Customer ID] [int] NOT NULL, [Customer] [nvarchar](100) NOT NULL, [Bill To Customer] [nvarchar](100) NOT NULL, [Category] [nvarchar](50) NOT NULL, [Buying Group] [nvarchar](50) NOT NULL, [Primary Contact] [nvarchar](50) NOT NULL, [Postal Code] [nvarchar](10) NOT NULL, [Valid From] [datetime2](7) NOT NULL, [Valid To] [datetime2](7) NOT NULL, [Lineage Key] [int] NOT NULL ) WITH (LOCATION='/v1/dimension_Customer/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[dimension_Employee] ( [Employee Key] [int] NOT NULL, [WWI Employee ID] [int] NOT NULL, [Employee] [nvarchar](50) NOT NULL, [Preferred Name] [nvarchar](50) NOT NULL, [Is Salesperson] [bit] NOT NULL, [Photo] [varbinary](300) NULL, [Valid From] [datetime2](7) NOT NULL, [Valid To] [datetime2](7) NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION='/v1/dimension_Employee/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[dimension_PaymentMethod] ( [Payment Method Key] [int] NOT NULL, [WWI Payment Method ID] [int] NOT NULL, [Payment Method] [nvarchar](50) NOT NULL, [Valid From] [datetime2](7) NOT NULL, [Valid To] [datetime2](7) NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/dimension_PaymentMethod/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[dimension_StockItem]( [Stock Item Key] [int] NOT NULL, [WWI Stock Item ID] [int] NOT NULL, [Stock Item] [nvarchar](100) NOT NULL, [Color] [nvarchar](20) NOT NULL, [Selling Package] [nvarchar](50) NOT NULL, [Buying Package] [nvarchar](50) NOT NULL, [Brand] [nvarchar](50) NOT NULL, [Size] [nvarchar](20) NOT NULL, [Lead Time Days] [int] NOT NULL, [Quantity Per Outer] [int] NOT NULL, [Is Chiller Stock] [bit] NOT NULL, [Barcode] [nvarchar](50) NULL, [Tax Rate] [decimal](18, 3) NOT NULL, [Unit Price] [decimal](18, 2) NOT NULL, [Recommended Retail Price] [decimal](18, 2) NULL, [Typical Weight Per Unit] [decimal](18, 3) NOT NULL, [Photo] [varbinary](300) NULL, [Valid From] [datetime2](7) NOT NULL, [Valid To] [datetime2](7) NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/dimension_StockItem/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[dimension_Supplier]( [Supplier Key] [int] NOT NULL, [WWI Supplier ID] [int] NOT NULL, [Supplier] [nvarchar](100) NOT NULL, [Category] [nvarchar](50) NOT NULL, [Primary Contact] [nvarchar](50) NOT NULL, [Supplier Reference] [nvarchar](20) NULL, [Payment Days] [int] NOT NULL, [Postal Code] [nvarchar](10) NOT NULL, [Valid From] [datetime2](7) NOT NULL, [Valid To] [datetime2](7) NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/dimension_Supplier/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[dimension_TransactionType]( [Transaction Type Key] [int] NOT NULL, [WWI Transaction Type ID] [int] NOT NULL, [Transaction Type] [nvarchar](50) NOT NULL, [Valid From] [datetime2](7) NOT NULL, [Valid To] [datetime2](7) NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/dimension_TransactionType/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[fact_Movement] ( [Movement Key] [bigint] NOT NULL, [Date Key] [date] NOT NULL, [Stock Item Key] [int] NOT NULL, [Customer Key] [int] NULL, [Supplier Key] [int] NULL, [Transaction Type Key] [int] NOT NULL, [WWI Stock Item Transaction ID] [int] NOT NULL, [WWI Invoice ID] [int] NULL, [WWI Purchase Order ID] [int] NULL, [Quantity] [int] NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/fact_Movement/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[fact_Order] ( [Order Key] [bigint] NOT NULL, [City Key] [int] NOT NULL, [Customer Key] [int] NOT NULL, [Stock Item Key] [int] NOT NULL, [Order Date Key] [date] NOT NULL, [Picked Date Key] [date] NULL, [Salesperson Key] [int] NOT NULL, [Picker Key] [int] NULL, [WWI Order ID] [int] NOT NULL, [WWI Backorder ID] [int] NULL, [Description] [nvarchar](100) NOT NULL, [Package] [nvarchar](50) NOT NULL, [Quantity] [int] NOT NULL, [Unit Price] [decimal](18, 2) NOT NULL, [Tax Rate] [decimal](18, 3) NOT NULL, [Total Excluding Tax] [decimal](18, 2) NOT NULL, [Tax Amount] [decimal](18, 2) NOT NULL, [Total Including Tax] [decimal](18, 2) NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/fact_Order/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[fact_Purchase] ( [Purchase Key] [bigint] NOT NULL, [Date Key] [date] NOT NULL, [Supplier Key] [int] NOT NULL, [Stock Item Key] [int] NOT NULL, [WWI Purchase Order ID] [int] NULL, [Ordered Outers] [int] NOT NULL, [Ordered Quantity] [int] NOT NULL, [Received Outers] [int] NOT NULL, [Package] [nvarchar](50) NOT NULL, [Is Order Finalized] [bit] NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/fact_Purchase/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[fact_Sale] ( [Sale Key] [bigint] NOT NULL, [City Key] [int] NOT NULL, [Customer Key] [int] NOT NULL, [Bill To Customer Key] [int] NOT NULL, [Stock Item Key] [int] NOT NULL, [Invoice Date Key] [date] NOT NULL, [Delivery Date Key] [date] NULL, [Salesperson Key] [int] NOT NULL, [WWI Invoice ID] [int] NOT NULL, [Description] [nvarchar](100) NOT NULL, [Package] [nvarchar](50) NOT NULL, [Quantity] [int] NOT NULL, [Unit Price] [decimal](18, 2) NOT NULL, [Tax Rate] [decimal](18, 3) NOT NULL, [Total Excluding Tax] [decimal](18, 2) NOT NULL, [Tax Amount] [decimal](18, 2) NOT NULL, [Profit] [decimal](18, 2) NOT NULL, [Total Including Tax] [decimal](18, 2) NOT NULL, [Total Dry Items] [int] NOT NULL, [Total Chiller Items] [int] NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/fact_Sale/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[fact_StockHolding] ( [Stock Holding Key] [bigint] NOT NULL, [Stock Item Key] [int] NOT NULL, [Quantity On Hand] [int] NOT NULL, [Bin Location] [nvarchar](20) NOT NULL, [Last Stocktake Quantity] [int] NOT NULL, [Last Cost Price] [decimal](18, 2) NOT NULL, [Reorder Level] [int] NOT NULL, [Target Stock Level] [int] NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/fact_StockHolding/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 ); CREATE EXTERNAL TABLE [ext].[fact_Transaction] ( [Transaction Key] [bigint] NOT NULL, [Date Key] [date] NOT NULL, [Customer Key] [int] NULL, [Bill To Customer Key] [int] NULL, [Supplier Key] [int] NULL, [Transaction Type Key] [int] NOT NULL, [Payment Method Key] [int] NULL, [WWI Customer Transaction ID] [int] NULL, [WWI Supplier Transaction ID] [int] NULL, [WWI Invoice ID] [int] NULL, [WWI Purchase Order ID] [int] NULL, [Supplier Invoice Number] [nvarchar](20) NULL, [Total Excluding Tax] [decimal](18, 2) NOT NULL, [Tax Amount] [decimal](18, 2) NOT NULL, [Total Including Tax] [decimal](18, 2) NOT NULL, [Outstanding Balance] [decimal](18, 2) NOT NULL, [Is Finalized] [bit] NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( LOCATION ='/v1/fact_Transaction/', DATA_SOURCE = WWIStorage, FILE_FORMAT = TextFileFormat, REJECT_TYPE = VALUE, REJECT_VALUE = 0 );
V Průzkumník objektů rozbalte SampleDW a zobrazte seznam externích tabulek, které jste vytvořili.
Načtení dat do fondu SQL
Tato část používá externí tabulky, které jste definovali k načtení ukázkových dat z Azure Blob do fondu SQL.
Poznámka:
V tomto kurzu se data načítají přímo do konečné tabulky. V produkčním prostředí budete obvykle používat příkaz CREATE TABLE AS SELECT k načtení dat do pracovní tabulky. Zatímco jsou data v pracovní tabulce, můžete provést všechny potřebné transformace. K připojení dat v pracovní tabulce do provozní tabulky můžete použít příkaz INSERT...SELECT. Další informace najdete v tématu popisujícím vkládání dat do provozní tabulky.
Tento skript pomocí příkazu T-SQL CREATE TABLE AS SELECT (CTAS) načítá data z Azure Storage Blob do nových tabulek ve vašem datovém skladu. Příkaz CTAS vytvoří novou tabulku na základě výsledků příkazu SELECT. Nová tabulka obsahuje stejné sloupce a datové typy jako výsledky příkazu SELECT. Když příkaz select vybere z externí tabulky, data se naimportují do relační tabulky v datovém skladu.
Tento skript nenačte data do tabulek wwi.dimension_Date a wwi.fact_Sale. Tyto tabulky se vygenerují v pozdějším kroku, aby mohly obsahovat velké množství řádků.
Spuštěním následujícího skriptu načtěte data do nových tabulek ve svém datovém skladu.
CREATE TABLE [wwi].[dimension_City] WITH ( DISTRIBUTION = REPLICATE, CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[dimension_City] OPTION (LABEL = 'CTAS : Load [wwi].[dimension_City]') ; CREATE TABLE [wwi].[dimension_Customer] WITH ( DISTRIBUTION = REPLICATE, CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[dimension_Customer] OPTION (LABEL = 'CTAS : Load [wwi].[dimension_Customer]') ; CREATE TABLE [wwi].[dimension_Employee] WITH ( DISTRIBUTION = REPLICATE, CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[dimension_Employee] OPTION (LABEL = 'CTAS : Load [wwi].[dimension_Employee]') ; CREATE TABLE [wwi].[dimension_PaymentMethod] WITH ( DISTRIBUTION = REPLICATE, CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[dimension_PaymentMethod] OPTION (LABEL = 'CTAS : Load [wwi].[dimension_PaymentMethod]') ; CREATE TABLE [wwi].[dimension_StockItem] WITH ( DISTRIBUTION = REPLICATE, CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[dimension_StockItem] OPTION (LABEL = 'CTAS : Load [wwi].[dimension_StockItem]') ; CREATE TABLE [wwi].[dimension_Supplier] WITH ( DISTRIBUTION = REPLICATE, CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[dimension_Supplier] OPTION (LABEL = 'CTAS : Load [wwi].[dimension_Supplier]') ; CREATE TABLE [wwi].[dimension_TransactionType] WITH ( DISTRIBUTION = REPLICATE, CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[dimension_TransactionType] OPTION (LABEL = 'CTAS : Load [wwi].[dimension_TransactionType]') ; CREATE TABLE [wwi].[fact_Movement] WITH ( DISTRIBUTION = HASH([Movement Key]), CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[fact_Movement] OPTION (LABEL = 'CTAS : Load [wwi].[fact_Movement]') ; CREATE TABLE [wwi].[fact_Order] WITH ( DISTRIBUTION = HASH([Order Key]), CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[fact_Order] OPTION (LABEL = 'CTAS : Load [wwi].[fact_Order]') ; CREATE TABLE [wwi].[fact_Purchase] WITH ( DISTRIBUTION = HASH([Purchase Key]), CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[fact_Purchase] OPTION (LABEL = 'CTAS : Load [wwi].[fact_Purchase]') ; CREATE TABLE [wwi].[seed_Sale] WITH ( DISTRIBUTION = HASH([WWI Invoice ID]), CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[fact_Sale] OPTION (LABEL = 'CTAS : Load [wwi].[seed_Sale]') ; CREATE TABLE [wwi].[fact_StockHolding] WITH ( DISTRIBUTION = HASH([Stock Holding Key]), CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[fact_StockHolding] OPTION (LABEL = 'CTAS : Load [wwi].[fact_StockHolding]') ; CREATE TABLE [wwi].[fact_Transaction] WITH ( DISTRIBUTION = HASH([Transaction Key]), CLUSTERED COLUMNSTORE INDEX ) AS SELECT * FROM [ext].[fact_Transaction] OPTION (LABEL = 'CTAS : Load [wwi].[fact_Transaction]') ;
Zobrazte data během načítání. Načítáte několik gb dat a komprimujete je do vysoce výkonných clusterovaných indexů columnstore. Otevřete nové okno dotazu pro SampleDW a spuštěním následujícího dotazu zobrazte stav načítání. Po spuštění dotazu si chyťte kávu a občerstvení, zatímco fond SQL dělá těžké zdvižení.
SELECT r.command, s.request_id, r.status, count(distinct input_name) as nbr_files, sum(s.bytes_processed)/1024/1024/1024 as gb_processed FROM sys.dm_pdw_exec_requests r INNER JOIN sys.dm_pdw_dms_external_work s ON r.request_id = s.request_id WHERE r.[label] = 'CTAS : Load [wwi].[dimension_City]' OR r.[label] = 'CTAS : Load [wwi].[dimension_Customer]' OR r.[label] = 'CTAS : Load [wwi].[dimension_Employee]' OR r.[label] = 'CTAS : Load [wwi].[dimension_PaymentMethod]' OR r.[label] = 'CTAS : Load [wwi].[dimension_StockItem]' OR r.[label] = 'CTAS : Load [wwi].[dimension_Supplier]' OR r.[label] = 'CTAS : Load [wwi].[dimension_TransactionType]' OR r.[label] = 'CTAS : Load [wwi].[fact_Movement]' OR r.[label] = 'CTAS : Load [wwi].[fact_Order]' OR r.[label] = 'CTAS : Load [wwi].[fact_Purchase]' OR r.[label] = 'CTAS : Load [wwi].[fact_StockHolding]' OR r.[label] = 'CTAS : Load [wwi].[fact_Transaction]' GROUP BY r.command, s.request_id, r.status ORDER BY nbr_files desc, gb_processed desc;
Zobrazte všechny systémové dotazy.
SELECT * FROM sys.dm_pdw_exec_requests;
Užívejte si pohled na to, jak se data krásně načítají do vašeho datového skladu.
Vytvoření tabulek a procedur pro vygenerování tabulek Date a Sales
Tato část vytvoří tabulky wwi.dimension_Date a wwi.fact_Sale. Vytvoří také uložené procedury, které mohou generovat miliony řádků v tabulkách wwi.dimension_Date a wwi.fact_Sale.
Vytvořte tabulky dimension_Date a fact_Sale.
CREATE TABLE [wwi].[dimension_Date] ( [Date] [datetime] NOT NULL, [Day Number] [int] NOT NULL, [Day] [nvarchar](10) NOT NULL, [Month] [nvarchar](10) NOT NULL, [Short Month] [nvarchar](3) NOT NULL, [Calendar Month Number] [int] NOT NULL, [Calendar Month Label] [nvarchar](20) NOT NULL, [Calendar Year] [int] NOT NULL, [Calendar Year Label] [nvarchar](10) NOT NULL, [Fiscal Month Number] [int] NOT NULL, [Fiscal Month Label] [nvarchar](20) NOT NULL, [Fiscal Year] [int] NOT NULL, [Fiscal Year Label] [nvarchar](10) NOT NULL, [ISO Week Number] [int] NOT NULL ) WITH ( DISTRIBUTION = REPLICATE, CLUSTERED INDEX ([Date]) ); CREATE TABLE [wwi].[fact_Sale] ( [Sale Key] [bigint] IDENTITY(1,1) NOT NULL, [City Key] [int] NOT NULL, [Customer Key] [int] NOT NULL, [Bill To Customer Key] [int] NOT NULL, [Stock Item Key] [int] NOT NULL, [Invoice Date Key] [date] NOT NULL, [Delivery Date Key] [date] NULL, [Salesperson Key] [int] NOT NULL, [WWI Invoice ID] [int] NOT NULL, [Description] [nvarchar](100) NOT NULL, [Package] [nvarchar](50) NOT NULL, [Quantity] [int] NOT NULL, [Unit Price] [decimal](18, 2) NOT NULL, [Tax Rate] [decimal](18, 3) NOT NULL, [Total Excluding Tax] [decimal](18, 2) NOT NULL, [Tax Amount] [decimal](18, 2) NOT NULL, [Profit] [decimal](18, 2) NOT NULL, [Total Including Tax] [decimal](18, 2) NOT NULL, [Total Dry Items] [int] NOT NULL, [Total Chiller Items] [int] NOT NULL, [Lineage Key] [int] NOT NULL ) WITH ( DISTRIBUTION = HASH ( [WWI Invoice ID] ), CLUSTERED COLUMNSTORE INDEX )
Vytvořte proceduru [wwi].[InitialSalesDataPopulation], která osminásobně navýší počet řádků v tabulce [wwi].[seed_Sale].
CREATE PROCEDURE [wwi].[InitialSalesDataPopulation] AS BEGIN INSERT INTO [wwi].[seed_Sale] ( [Sale Key], [City Key], [Customer Key], [Bill To Customer Key], [Stock Item Key], [Invoice Date Key], [Delivery Date Key], [Salesperson Key], [WWI Invoice ID], [Description], [Package], [Quantity], [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Profit], [Total Including Tax], [Total Dry Items], [Total Chiller Items], [Lineage Key] ) SELECT [Sale Key], [City Key], [Customer Key], [Bill To Customer Key], [Stock Item Key], [Invoice Date Key], [Delivery Date Key], [Salesperson Key], [WWI Invoice ID], [Description], [Package], [Quantity], [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Profit], [Total Including Tax], [Total Dry Items], [Total Chiller Items], [Lineage Key] FROM [wwi].[seed_Sale] INSERT INTO [wwi].[seed_Sale] ( [Sale Key], [City Key], [Customer Key], [Bill To Customer Key], [Stock Item Key], [Invoice Date Key], [Delivery Date Key], [Salesperson Key], [WWI Invoice ID], [Description], [Package], [Quantity], [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Profit], [Total Including Tax], [Total Dry Items], [Total Chiller Items], [Lineage Key] ) SELECT [Sale Key], [City Key], [Customer Key], [Bill To Customer Key], [Stock Item Key], [Invoice Date Key], [Delivery Date Key], [Salesperson Key], [WWI Invoice ID], [Description], [Package], [Quantity], [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Profit], [Total Including Tax], [Total Dry Items], [Total Chiller Items], [Lineage Key] FROM [wwi].[seed_Sale] INSERT INTO [wwi].[seed_Sale] ( [Sale Key], [City Key], [Customer Key], [Bill To Customer Key], [Stock Item Key], [Invoice Date Key], [Delivery Date Key], [Salesperson Key], [WWI Invoice ID], [Description], [Package], [Quantity], [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Profit], [Total Including Tax], [Total Dry Items], [Total Chiller Items], [Lineage Key] ) SELECT [Sale Key], [City Key], [Customer Key], [Bill To Customer Key], [Stock Item Key], [Invoice Date Key], [Delivery Date Key], [Salesperson Key], [WWI Invoice ID], [Description], [Package], [Quantity], [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Profit], [Total Including Tax], [Total Dry Items], [Total Chiller Items], [Lineage Key] FROM [wwi].[seed_Sale] END
Vytvořte tuto uloženou proceduru, která naplní řádky v tabulce wwi.dimension_Date.
CREATE PROCEDURE [wwi].[PopulateDateDimensionForYear] @Year [int] AS BEGIN IF OBJECT_ID('tempdb..#month', 'U') IS NOT NULL DROP TABLE #month CREATE TABLE #month ( monthnum int, numofdays int ) WITH ( DISTRIBUTION = ROUND_ROBIN, heap ) INSERT INTO #month SELECT 1, 31 UNION SELECT 2, CASE WHEN (@YEAR % 4 = 0 AND @YEAR % 100 <> 0) OR @YEAR % 400 = 0 THEN 29 ELSE 28 END UNION SELECT 3,31 UNION SELECT 4,30 UNION SELECT 5,31 UNION SELECT 6,30 UNION SELECT 7,31 UNION SELECT 8,31 UNION SELECT 9,30 UNION SELECT 10,31 UNION SELECT 11,30 UNION SELECT 12,31 IF OBJECT_ID('tempdb..#days', 'U') IS NOT NULL DROP TABLE #days CREATE TABLE #days (days int) WITH (DISTRIBUTION = ROUND_ROBIN, HEAP) INSERT INTO #days SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23 UNION SELECT 24 UNION SELECT 25 UNION SELECT 26 UNION SELECT 27 UNION SELECT 28 UNION SELECT 29 UNION SELECT 30 UNION SELECT 31 INSERT [wwi].[dimension_Date] ( [Date], [Day Number], [Day], [Month], [Short Month], [Calendar Month Number], [Calendar Month Label], [Calendar Year], [Calendar Year Label], [Fiscal Month Number], [Fiscal Month Label], [Fiscal Year], [Fiscal Year Label], [ISO Week Number] ) SELECT CAST(CAST(monthnum AS VARCHAR(2)) + '/' + CAST([days] AS VARCHAR(3)) + '/' + CAST(@year AS CHAR(4)) AS DATE) AS [Date] ,DAY(CAST(CAST(monthnum AS VARCHAR(2)) + '/' + CAST([days] AS VARCHAR(3)) + '/' + CAST(@year AS CHAR(4)) AS DATE)) AS [Day Number] ,CAST(DATENAME(day, CAST(CAST(monthnum AS VARCHAR(2)) + '/' + CAST([days] AS VARCHAR(3)) + '/' + CAST(@year AS CHAR(4)) AS DATE)) AS NVARCHAR(10)) AS [Day] ,CAST(DATENAME(month, CAST(CAST(monthnum AS VARCHAR(2)) + '/' + CAST([days] AS VARCHAR(3)) + '/' + CAST(@year as char(4)) AS DATE)) AS nvarchar(10)) AS [Month] ,CAST(SUBSTRING(DATENAME(month, CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)), 1, 3) AS nvarchar(3)) AS [Short Month] ,MONTH(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) AS [Calendar Month Number] ,CAST(N'CY' + CAST(YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) AS nvarchar(4)) + N'-' + SUBSTRING(DATENAME(month, CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)), 1, 3) AS nvarchar(10)) AS [Calendar Month Label] ,YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) AS [Calendar Year] ,CAST(N'CY' + CAST(YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) AS nvarchar(4)) AS nvarchar(10)) AS [Calendar Year Label] ,CASE WHEN MONTH(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) IN (11, 12) THEN MONTH(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) - 10 ELSE MONTH(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) + 2 END AS [Fiscal Month Number] ,CAST(N'FY' + CAST(CASE WHEN MONTH(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) IN (11, 12) THEN YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) + 1 ELSE YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) END AS nvarchar(4)) + N'-' + SUBSTRING(DATENAME(month, CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)), 1, 3) AS nvarchar(20)) AS [Fiscal Month Label] ,CASE WHEN MONTH(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) IN (11, 12) THEN YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) + 1 ELSE YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) END AS [Fiscal Year] ,CAST(N'FY' + CAST(CASE WHEN MONTH(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) IN (11, 12) THEN YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) + 1 ELSE YEAR(CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE))END AS nvarchar(4)) AS nvarchar(10)) AS [Fiscal Year Label] , DATEPART(ISO_WEEK, CAST(CAST(monthnum as varchar(2)) + '/' + CAST([days] as varchar(3)) + '/' + CAST(@year as char(4)) AS DATE)) AS [ISO Week Number] FROM #month m CROSS JOIN #days d WHERE d.days <= m.numofdays DROP table #month; DROP table #days; END;
Vytvořte tento postup, který naplní tabulky wwi.dimension_Date a wwi.fact_Sale. Tato procedura volá uloženou proceduru [wwi].[PopulateDateDimensionForYear], která naplní tabulku wwi.dimension_Date.
CREATE PROCEDURE [wwi].[Configuration_PopulateLargeSaleTable] @EstimatedRowsPerDay [bigint],@Year [int] AS BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; EXEC [wwi].[PopulateDateDimensionForYear] @Year; DECLARE @OrderCounter bigint = 0; DECLARE @NumberOfSalesPerDay bigint = @EstimatedRowsPerDay; DECLARE @DateCounter date; DECLARE @StartingSaleKey bigint; DECLARE @MaximumSaleKey bigint = (SELECT MAX([Sale Key]) FROM wwi.seed_Sale); DECLARE @MaxDate date; SET @MaxDate = (SELECT MAX([Invoice Date Key]) FROM wwi.fact_Sale) IF ( @MaxDate < CAST(@YEAR AS CHAR(4)) + '1231') AND (@MaxDate > CAST(@YEAR AS CHAR(4)) + '0101') SET @DateCounter = @MaxDate ELSE SET @DateCounter= CAST(@Year as char(4)) + '0101'; PRINT 'Targeting ' + CAST(@NumberOfSalesPerDay AS varchar(20)) + ' sales per day.'; DECLARE @OutputCounter varchar(20); DECLARE @variance DECIMAL(18,10); DECLARE @VariantNumberOfSalesPerDay BIGINT; WHILE @DateCounter < CAST(@YEAR AS CHAR(4)) + '1231' BEGIN SET @OutputCounter = CONVERT(varchar(20), @DateCounter, 112); RAISERROR(@OutputCounter, 0, 1); SET @variance = (SELECT RAND() * 10)*.01 + .95 SET @VariantNumberOfSalesPerDay = FLOOR(@NumberOfSalesPerDay * @variance) SET @StartingSaleKey = @MaximumSaleKey - @VariantNumberOfSalesPerDay - FLOOR(RAND() * 20000); SET @OrderCounter = 0; INSERT [wwi].[fact_Sale] ( [City Key], [Customer Key], [Bill To Customer Key], [Stock Item Key], [Invoice Date Key], [Delivery Date Key], [Salesperson Key], [WWI Invoice ID], [Description], Package, Quantity, [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], Profit, [Total Including Tax], [Total Dry Items], [Total Chiller Items], [Lineage Key] ) SELECT TOP(@VariantNumberOfSalesPerDay) [City Key], [Customer Key], [Bill To Customer Key], [Stock Item Key], @DateCounter, DATEADD(day, 1, @DateCounter), [Salesperson Key], [WWI Invoice ID], [Description], Package, Quantity, [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], Profit, [Total Including Tax], [Total Dry Items], [Total Chiller Items], [Lineage Key] FROM [wwi].[seed_Sale] WHERE --[Sale Key] > @StartingSaleKey and /* IDENTITY DOES NOT WORK THE SAME IN SQLDW AND CAN'T USE THIS METHOD FOR VARIANT */ [Invoice Date Key] >=cast(@YEAR AS CHAR(4)) + '-01-01' ORDER BY [Sale Key]; SET @DateCounter = DATEADD(day, 1, @DateCounter); END; END;
Generování milionů řádků
Pomocí uložených procedur, které jste vytvořili, vygenerujte miliony řádků v tabulce wwi.fact_Sale a odpovídající data v tabulce wwi.dimension_Date.
Spuštěním této procedury přidejte do [wwi].[seed_Sale] další řádky.
EXEC [wwi].[InitialSalesDataPopulation]
Spuštěním tohoto postupu naplníte wwi.fact_Sale 100 000 řádků za den pro každý den v roce 2000.
EXEC [wwi].[Configuration_PopulateLargeSaleTable] 100000, 2000
Vygenerování dat za celý rok v předchozím kroku může nějakou dobu trvat. Pokud chcete zjistit, jaký den se aktuálně zpracovává, otevřete nové okno dotazu a spusťte tento příkaz SQL:
SELECT MAX([Invoice Date Key]) FROM wwi.fact_Sale;
Spuštěním následujícího příkazu zobrazte využité místo.
EXEC sp_spaceused N'wwi.fact_Sale';
Naplnění mezipaměti replikované tabulky
Fond SQL replikuje tabulku ukládáním dat do mezipaměti do každého výpočetního uzlu. Mezipaměť se naplní při spuštění dotazu na tabulku. Proto může první dotaz na replikovanou tabulku vyžadovat čas navíc k naplnění mezipaměti. Po naplnění mezipaměti budou dotazy na replikované tabulky rychlejší.
Spuštěním těchto dotazů SQL naplňte mezipaměť replikované tabulky na výpočetních uzlech.
SELECT TOP 1 * FROM [wwi].[dimension_City];
SELECT TOP 1 * FROM [wwi].[dimension_Customer];
SELECT TOP 1 * FROM [wwi].[dimension_Date];
SELECT TOP 1 * FROM [wwi].[dimension_Employee];
SELECT TOP 1 * FROM [wwi].[dimension_PaymentMethod];
SELECT TOP 1 * FROM [wwi].[dimension_StockItem];
SELECT TOP 1 * FROM [wwi].[dimension_Supplier];
SELECT TOP 1 * FROM [wwi].[dimension_TransactionType];
Vytvoření statistik pro nově načtená data
Pro dosažení vysokého výkonu dotazů je důležité po prvním načtení vytvořit statistiku pro každý sloupec každé tabulky. Důležité je také aktualizovat statistiku po důležitých změnách v datech.
Vytvořte tuto uloženou proceduru, která aktualizuje statistiku pro všechny sloupce všech tabulek.
CREATE PROCEDURE [dbo].[prc_sqldw_create_stats] ( @create_type tinyint -- 1 default 2 Fullscan 3 Sample , @sample_pct tinyint ) AS IF @create_type IS NULL BEGIN SET @create_type = 1; END; IF @create_type NOT IN (1,2,3) BEGIN THROW 151000,'Invalid value for @stats_type parameter. Valid range 1 (default), 2 (fullscan) or 3 (sample).',1; END; IF @sample_pct IS NULL BEGIN; SET @sample_pct = 20; END; IF OBJECT_ID('tempdb..#stats_ddl') IS NOT NULL BEGIN; DROP TABLE #stats_ddl; END; CREATE TABLE #stats_ddl WITH ( DISTRIBUTION = HASH([seq_nmbr]) , LOCATION = USER_DB ) AS WITH T AS ( SELECT t.[name] AS [table_name] , s.[name] AS [table_schema_name] , c.[name] AS [column_name] , c.[column_id] AS [column_id] , t.[object_id] AS [object_id] , ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS [seq_nmbr] FROM sys.[tables] t JOIN sys.[schemas] s ON t.[schema_id] = s.[schema_id] JOIN sys.[columns] c ON t.[object_id] = c.[object_id] LEFT JOIN sys.[stats_columns] l ON l.[object_id] = c.[object_id] AND l.[column_id] = c.[column_id] AND l.[stats_column_id] = 1 LEFT JOIN sys.[external_tables] e ON e.[object_id] = t.[object_id] WHERE l.[object_id] IS NULL AND e.[object_id] IS NULL -- not an external table ) SELECT [table_schema_name] , [table_name] , [column_name] , [column_id] , [object_id] , [seq_nmbr] , CASE @create_type WHEN 1 THEN CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+')' AS VARCHAR(8000)) WHEN 2 THEN CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+') WITH FULLSCAN' AS VARCHAR(8000)) WHEN 3 THEN CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+') WITH SAMPLE '+CONVERT(varchar(4),@sample_pct)+' PERCENT' AS VARCHAR(8000)) END AS create_stat_ddl FROM T ; DECLARE @i INT = 1 , @t INT = (SELECT COUNT(*) FROM #stats_ddl) , @s NVARCHAR(4000) = N'' ; WHILE @i <= @t BEGIN SET @s=(SELECT create_stat_ddl FROM #stats_ddl WHERE seq_nmbr = @i); PRINT @s EXEC sp_executesql @s SET @i+=1; END DROP TABLE #stats_ddl;
Spuštěním tohoto příkazu vytvořte statistiku pro všechny sloupce všech tabulek v datovém skladu.
EXEC [dbo].[prc_sqldw_create_stats] 1, NULL;
Vyčištění prostředků
Účtují se vám výpočetní prostředky a data, která načtete do svého datového skladu. Ta se účtují zvlášť.
Pomocí tohoto postupu podle potřeby vyčistěte prostředky.
Přihlaste se k webu Azure Portal a klikněte na váš datový sklad.
Pokud chcete zachovat data v úložišti, můžete pozastavit výpočetní prostředky v době, kdy datový sklad nepoužíváte. Pozastavením výpočetních prostředků se vám budou účtovat poplatky jenom za úložiště dat a výpočetní prostředky můžete obnovit vždy, když budete připraveni pracovat s daty. Pokud chcete pozastavit výpočetní prostředky, klikněte na tlačítko Pozastavit. Když je datový sklad pozastavený, zobrazí se tlačítko Spustit. Pokud chcete obnovit výpočetní prostředky, klikněte na Spustit.
Pokud chcete zamezit budoucím poplatkům, můžete datový sklad odstranit. Pokud chcete odebrat datový sklad, aby se vám neúčtovaly výpočetní prostředky ani prostředky úložiště, klikněte na Odstranit.
Chcete-li odebrat server, který jste vytvořili, klepněte na tlačítko sample-svr.database.windows.net v předchozím obrázku a klepněte na tlačítko Odstranit. Buďte opatrní, protože odstraněním serveru se odstraní také všechny databáze k tomuto serveru přiřazené.
Pokud chcete odebrat skupinu prostředků, klikněte na SampleRG a pak klikněte na Odstranit skupinu prostředků.
Další kroky
V tomto kurzu jste se naučili vytvořit datový sklad a uživatele pro načítání dat. Vytvořili jste externí tabulky pro definici struktury dat uložených v Azure Storage Blob a pak jste pomocí příkazu PolyBase CREATE TABLE AS SELECT načetli data do svého datového skladu.
Provedli jste tyto akce:
- Vytvoření datového skladu pomocí fondu SQL na webu Azure Portal
- Vytvořit pravidlo brány firewall na úrovni serveru na webu Azure Portal
- Připojeno k fondu SQL pomocí SSMS
- Vytvoření vyhrazeného uživatele pro načítání dat
- Vytvoření externích tabulek pro data v Azure Storage Blob
- Načtení dat do datového skladu pomocí příkazu T-SQL CTAS
- Zobrazení průběhu nahrávání dat
- Vytvoření statistik pro nově načtená data
V přehledu vývoje se dozvíte, jak migrovat existující databázi do fondu Azure Synapse SQL.