Indfødning af data i dit lager ved hjælp af Transact-SQL
Gælder for: Warehouse i Microsoft Fabric
Transact-SQL-sproget indeholder indstillinger, som du kan bruge til at indlæse data i stor skala fra eksisterende tabeller i dit lakehouse og lager i nye tabeller på dit lager. Disse indstillinger er praktiske, hvis du har brug for at oprette nye versioner af en tabel med aggregerede data, versioner af tabeller med et undersæt af rækkerne eller oprette en tabel som følge af en kompleks forespørgsel. Lad os udforske nogle eksempler.
Vigtigt
Microsoft Fabric er i øjeblikket i PRØVEVERSION. Disse oplysninger relaterer til et foreløbig produkt, der kan ændres væsentligt, før de udgives. Microsoft giver ingen garantier, udtrykt eller stiltiende, med hensyn til de oplysninger, der er angivet her.
Oprettelse af en ny tabel med resultatet af en forespørgsel ved hjælp af CREATE TABLE AS SELECT (CTAS)
Med sætningen CREATE TABLE AS SELECT (CTAS) kan du oprette en ny tabel på lageret ud fra outputtet af en SELECT
sætning. Den kører indtagelseshandlingen i den nye tabel parallelt, hvilket gør den yderst effektiv til datatransformation og oprettelse af nye tabeller i dit arbejdsområde.
Bemærk
Eksemplerne i denne artikel bruger Bing COVID-19-eksempeldatasættet. Hvis du vil indlæse eksempeldatasættet, skal du følge trinnene i Indfødning af data i dit lager ved hjælp af COPY-sætningen for at oprette eksempeldataene på dit lager.
I det første eksempel illustreres det, hvordan du opretter en ny tabel, der er en kopi af den eksisterende dbo.[bing_covid-19_data_2023]
tabel, men kun filtreres til data fra året 2023:
CREATE TABLE [dbo].[bing_covid-19_data_2023]
AS
SELECT *
FROM [dbo].[bing_covid-19_data]
WHERE DATEPART(YEAR,[updated]) = '2023';
Du kan også oprette en ny tabel med nye year
kolonner af typen , , month
dayofmonth
med værdier, der er hentet fra updated
kolonnen i kildetabellen. Dette kan være nyttigt, hvis du forsøger at visualisere infektionsdata efter år eller for at se måneder, hvor de fleste COVID-19-tilfælde er observeret:
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];
Som et andet eksempel kan du oprette en ny tabel, der opsummerer antallet af sager, der observeres i hver måned, uanset året, for at evaluere, hvordan sæsonudsving kan påvirke spredningen i et givet land/område. Den bruger den tabel, der blev oprettet i det forrige eksempel, med den nye month
kolonne som kilde:
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];
På baggrund af denne nye tabel kan vi se, at USA observerede flere bekræftede sager på tværs af alle år i måneden , January
efterfulgt af December
og October
. April
er måneden med det laveste antal sager samlet set:
SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;
Du kan få flere eksempler og syntaksreference i CREATE TABLE AS SELECT (Transact-SQL).
Indtagelse af data i eksisterende tabeller med T-SQL-forespørgsler
I de forrige eksempler oprettes nye tabeller baseret på resultatet af en forespørgsel. Hvis du vil replikere eksemplerne, men på eksisterende tabeller, skal INSERT... SELECT-mønster kan bruges. Følgende kode indlæser f.eks. nye data i en eksisterende tabel:
INSERT INTO [dbo].[bing_covid-19_data_2023]
SELECT * FROM [dbo].[bing_covid-19_data]
WHERE [updated] > '2023-02-28';
Forespørgselskriterierne for sætningen SELECT
kan være en hvilken som helst gyldig forespørgsel, så længe de resulterende forespørgselskolonnetyper justerer med kolonnerne i destinationstabellen. Hvis kolonnenavne er angivet og kun indeholder et undersæt af kolonnerne fra destinationstabellen, indlæses alle andre kolonner som NULL
. Du kan få flere oplysninger under Brug af INSERT INTO... VÆLG for at masseimportér data med minimal logføring og parallelitet.
Indtagelse af data fra tabeller på forskellige lagre og lakehouses
For både OPRET TABEL SOM SELECT og INSERT... SELECT, kan sætningen SELECT
også referere til tabeller på lagersteder, der er forskellige fra det lager, hvor destinationstabellen er gemt, ved hjælp af forespørgsler på tværs af lagersteder. Dette kan opnås ved hjælp af navngivningskonventionen [warehouse_or_lakehouse_name.][schema_name.]table_name
i tre dele . Antag f.eks., at du har følgende arbejdsområdeaktiver:
- Et lakehouse, der er navngivet
cases_lakehouse
med de nyeste sagsdata. - Et lager med navnet
reference_warehouse
med tabeller, der bruges til referencedata. - Et lager med navnet
research_warehouse
, hvor destinationstabellen oprettes.
Der kan oprettes en ny tabel, der bruger navngivning i tre dele til at kombinere data fra tabeller på disse arbejdsområdeaktiver:
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];
Hvis du vil vide mere om forespørgsler på tværs af lagre, skal du se Skriv en SQL-forespørgsel på tværs af databaser.