Sdílet prostřednictvím


Ingestování dat do vašeho skladu pomocí jazyka Transact-SQL

Platí pro:✅ Warehouse v Microsoft Fabric

Jazyk Transact-SQL nabízí možnosti, které můžete použít k načtení dat ve velkém měřítku z existujících tabulek ve vašem lakehouse a skladu do nových tabulek ve skladu. Tyto možnosti jsou vhodné, pokud potřebujete vytvořit nové verze tabulky s agregovanými daty, verzemi tabulek s podmnožinou řádků nebo vytvořit tabulku v důsledku složitého dotazu. Pojďme se podívat na některé příklady.

Vytvoření nové tabulky s výsledkem dotazu pomocí příkazu CREATE TABLE AS SELECT (CTAS)

Příkaz CREATE TABLE AS SELECT (CTAS) umožňuje vytvořit novou tabulku ve skladu z výstupu SELECT příkazu. Spouští operaci příjmu dat do nové tabulky paralelně, takže je vysoce efektivní pro transformaci dat a vytváření nových tabulek ve vašem pracovním prostoru.

Poznámka:

Příklady v tomto článku používají ukázkovou datovou sadu Covid-19 Bingu. Pokud chcete načíst ukázkovou datovou sadu, postupujte podle kroků v Ingestování dat do vašeho skladu pomocí příkazu COPY a vytvořte ukázková data do vašeho skladu.

První příklad ukazuje, jak vytvořit novou tabulku, která je kopií existující dbo.[bing_covid-19_data_2023] tabulky, ale filtrovaná na data pouze z roku 2023:

CREATE TABLE [dbo].[bing_covid-19_data_2023]
AS
SELECT * 
FROM [dbo].[bing_covid-19_data] 
WHERE DATEPART(YEAR,[updated]) = '2023';

Můžete také vytvořit novou tabulku s novými yearmonthdayofmonth , sloupci a hodnotami získanými ze updated sloupce ve zdrojové tabulce. To může být užitečné, pokud se pokoušíte vizualizovat data o infekcích podle roku nebo zobrazit měsíce, kdy se pozorují případy COVID-19:

CREATE TABLE [dbo].[bing_covid-19_data_with_year_month_day]
AS
SELECT DATEPART(YEAR,[updated]) [year], DATEPART(MONTH,[updated]) [month], DATEPART(DAY,[updated]) [dayofmonth], * 
FROM [dbo].[bing_covid-19_data];

V dalším příkladu můžete vytvořit novou tabulku, která shrnuje počet případů pozorovaných v jednotlivých měsících bez ohledu na rok, abyste zjistili, jak sezónnost ovlivňuje rozpětí v dané zemi/oblasti. Používá tabulku vytvořenou v předchozím příkladu s novým month sloupcem jako zdrojem:

CREATE TABLE [dbo].[infections_by_month]
AS
SELECT [country_region],[month], SUM(CAST(confirmed as bigint)) [confirmed_sum]
FROM [dbo].[bing_covid-19_data_with_year_month_day]
GROUP BY [country_region],[month];

Na základě této nové tabulky vidíme, že USA zaznamenal více potvrzených případů za všechny roky v měsíci January, po kterém následuje December a October. April je měsíc s nejnižším celkovým počtem případů:

SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;

Snímek obrazovky s výsledky dotazu zobrazující počet infekcí podle měsíce v USA seřazené podle měsíce v sestupném pořadí Nahoře je číslo měsíce 1.

Další příklady a odkazy na syntaxi najdete v tématu CREATE TABLE AS SELECT (Transact-SQL).

Ingestování dat do existujících tabulek pomocí dotazů T-SQL

Předchozí příklady vytvářejí nové tabulky na základě výsledku dotazu. Pokud chcete replikovat příklady, ale v existujících tabulkách, insert... Lze použít vzor SELECT . Například následující kód ingestuje nová data do existující tabulky:

INSERT INTO [dbo].[bing_covid-19_data_2023]
SELECT * FROM [dbo].[bing_covid-19_data] 
WHERE [updated] > '2023-02-28';

Kritéria dotazu pro příkaz SELECT mohou být libovolný platný dotaz, pokud výsledné typy sloupců dotazu odpovídají sloupcům v cílové tabulce. Pokud jsou zadány názvy sloupců a obsahují pouze podmnožinu sloupců z cílové tabulky, všechny ostatní sloupce se načtou jako NULL. Další informace naleznete v tématu Použití funkce INSERT INTO... Select to Bulk Import data with minimal logging and parallelism.

Příjem dat z tabulek v různých skladech a v jezeře

Pro CREATE TABLE AS SELECT i INSERT... PŘÍKAZ SELECT může také odkazovat na tabulky ve skladech, které se liší od skladu, kde je cílová tabulka uložená, pomocí dotazů mezi sklady.SELECT Toho lze dosáhnout pomocí třídílné konvence [warehouse_or_lakehouse_name.][schema_name.]table_namepojmenování . Předpokládejme například, že máte následující prostředky pracovního prostoru:

  • Jezero s názvem cases_lakehouse s nejnovějšími daty případu.
  • Sklad s názvy reference_warehouse s tabulkami používanými pro referenční data.
  • Sklad s názvem research_warehouse , ve kterém se vytvoří cílová tabulka.

Můžete vytvořit novou tabulku, která používá třídílné pojmenování ke kombinování dat z tabulek v těchto prostředcích pracovního prostoru:

CREATE TABLE [research_warehouse].[dbo].[cases_by_continent]
AS
SELECT 
FROM [cases_lakehouse].[dbo].[bing_covid-19_data] cases
INNER JOIN [reference_warehouse].[dbo].[bing_covid-19_data] reference
ON cases.[iso3] = reference.[countrycode];

Další informace o dotazech napříč sklady najdete v tématu Zápis dotazu SQL napříč databázemi.