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 year
stĺpcami , , month
dayofmonth
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 January
prí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;
Ď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_name
pomenovania . 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.