Zdieľať cez


Ingestovanie údajov do skladu pomocou Transact-SQL

Vzťahuje sa na:✅ Warehouse v službe Microsoft Fabric

Jazyk Transact-SQL ponúka možnosti, ktoré môžete použiť na načítanie údajov z existujúcich tabuliek v úložisku Lakehouse a skladu do nových tabuliek vo vašom sklade. Tieto možnosti sú pohodlné, ak potrebujete vytvoriť nové verzie tabuľky so agregovanými údajmi, verzie tabuliek s podmnožinou riadkov alebo vytvoriť tabuľku ako výsledok zložitého dotazu. Pozrime sa na niekoľko príkladov.

Vytvorenie novej tabuľky s výsledkom dotazu pomocou funkcie CREATE TABLE AS SELECT (CTAS)

Príkaz CREATE TABLE AS SELECT (CTAS) umožňuje vytvoriť vo vašom sklade novú tabuľku z výstupu príkazu SELECT. Spustí súbežnú operáciu príjmu do novej tabuľky, vďaka čomu je veľmi efektívna pri transformácii údajov a vytváraní nových tabuliek vo vašom pracovnom priestore.

Pre SELECT časť príkazu CTAS môžete použiť nasledujúce možnosti:

  • Čítanie tabuľky v sklade, ako je napríklad pracovná tabuľka.
  • Čítanie tabuľky Lakehouse automaticky generovanej prostredníctvom koncového bodu SQL Analytics pre Lakehouse.
  • Čítanie údajov priamo z externého súboru pomocou funkcie OPENROWSET (Preview).

Poznámka

V príkladoch v tomto článku je použitá vzorová množina údajov pre COVID-19 bing. Ak chcete načítať vzorovú množinu údajov, postupujte podľa krokov uvedených v téme Údaje Ingestu do skladu pomocou príkazu COPY a vytvorte do skladu vzorové údaje.

Prvý príklad ilustruje, ako vytvoriť novú tabuľku, ktorá je kópiou existujúcej dbo.[bing_covid-19_data_2023] tabuľky, ale filtrovaná len na údaje z roku 2023:

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

Namiesto čítania údajov z pracovnej [bing_covid-19_data] tabuľky môžete tiež vytvoriť novú tabuľku priamo z externého súboru pomocou funkcie OPENROWSET (verejná ukážka):

CREATE TABLE [dbo].[bing_covid-19_data_2022]
AS
SELECT id, updated, confirmed, deaths, recovered, latitude, longitude, iso2, iso3, country_region
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet') AS data
WHERE DATEPART(YEAR,[updated]) = '2022'

Môžete tiež vytvoriť novú tabuľku s novými yearstĺpcami , , monthdayofmonth s hodnotami získanými zo updated stĺpca v zdrojovej tabuľke. Môže to byť užitočné, ak sa pokúšate vizualizovať údaje o infekcii podľa rokov alebo zobraziť mesiace, v ktorých sa pozoruje väčšina prípadov ochorenia 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];

Namiesto čítania údajov z pracovnej [bing_covid-19_data] tabuľky môžete tiež vytvoriť novú tabuľku priamo z externého súboru a transformovať výsledky:

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],
        id, confirmed, deaths, recovered, latitude, longitude, iso2, iso3, country_region
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet') AS data

Ďalším príkladom je vytvorenie novej tabuľky, ktorá sumarizuje počet prípadov pozorovaných v každom mesiaci bez ohľadu na rok na vyhodnotenie vplyvu sezónnosti na šírenie v danej krajine alebo oblasti. Použije tabuľku vytvorenú v predchádzajúcom príklade s novým month stĺpcom ako zdrojom:

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];

CREATE TABLE [dbo].[infections_by_month_2022]
AS
SELECT [country_region], DATEPART(MONTH,[updated]) AS [month], SUM(CAST(confirmed as bigint)) [confirmed_sum]
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet') AS data
WHERE DATEPART(YEAR,[updated]) = '2022'
GROUP BY [country_region],DATEPART(MONTH,[updated]);

Na základe tejto novej tabuľky vidíme, že Spojené štáty zaznamenali viac potvrdených Januaryprípadov za všetky roky v mesiaci , potom nasledujú December a October. April je mesiac s najnižším celkovým počtom prípadov:

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

Snímka obrazovky výsledkov dotazu zobrazujúca počet infekcií podľa mesiaca v Spojených štátoch, zoradené podľa mesiaca, v zostupnom poradí. V hornej časti sa zobrazí číslo mesiaca 1.

Ďalšie príklady a referenčné informácie o syntaxi nájdete v téme VYTVORENIE TABUĽKY AS SELECT (Transact-SQL).

Ingestovanie údajov do existujúcich tabuliek s dotazmi T-SQL

V predchádzajúcich príkladoch sa vytvorili nové tabuľky na základe výsledku dotazu. Ak chcete replikovať príklady, ale v existujúcich tabuľkách, tlačidlo VLOŽIŤ... Možno použiť vzor SELECT . Nasledujúci kód napríklad ingestuje nové údaje do existujúcej tabuľky:

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

Kritériom dotazu SELECT pre príkaz môže byť ľubovoľný platný dotaz, pokiaľ sa výsledný typ stĺpca dotazu zarovná so stĺpcami v cieľovej tabuľke. Ak sú zadané názvy stĺpcov a obsahujú iba podmnožinu stĺpcov z cieľovej tabuľky, všetky ostatné stĺpce sa načítajú ako NULL. Ďalšie informácie nájdete v téme Použitie funkcie VLOŽIŤ DO... Vyberte možnosť Hromadne importovať údaje s minimálnym zapisovania do denníka a paralelného spracovávania.

Údaje Ingestu z tabuliek v rôznych skladoch a domovoch jazier

Pre obidve MOŽNOSTI VYTVORIŤ TABUĽKU AKO VYBRAŤ A VLOŽIŤ... Príkaz môže tiež odkazovať na tabuľky v skladoch, ktoré sa líšia od skladu, SELECT kde je uložená cieľová tabuľka, pomocou dotazov krížového skladu. To možno dosiahnuť použitím trojdielnej konvencie [warehouse_or_lakehouse_name.][schema_name.]table_namepomenovania . Predpokladajme napríklad, že máte nasledujúce položky pracovného priestoru:

  • Lakehouse s názvom cases_lakehouse s najnovšími údajmi prípadu.
  • Sklad s názvom reference_warehouse s tabuľkami používanými pre referenčné údaje.
  • Sklad s názvom research_warehouse , na ktorom sa vytvorí cieľová tabuľka.

Vytvorí sa nová tabuľka, ktorá používa trojdielne pomenovanie na kombinovanie údajov z tabuliek v týchto aktívach pracovného priestoru:

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];

Ďalšie informácie o dotazoch krížového skladu nájdete v téme Písanie dotazu SQL pre krížovú databázu.