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 i 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.

Opret 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 lageret ved hjælp af COPY-sætningen for at oprette eksempeldataene i 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 som kun er filtreret efter 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 yearkolonner af typen , , monthdayofmonth 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 er observeret i hver måned, uanset året, for at evaluere, hvordan sæsonudsving påvirker 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 mere bekræftede tilfælde på tværs af alle år i måneden , Januaryefterfulgt 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;

Skærmbillede af forespørgselsresultaterne, der viser antallet af infektioner efter måned i USA sorteret efter måned i faldende rækkefølge. Månedsnummeret 1 vises øverst.

Du kan få flere eksempler og syntaksreference i CREATE TABLE AS SELECT (Transact-SQL).

Indfødning af data i eksisterende tabeller med T-SQL-forespørgsler

I de forrige eksempler oprettes nye tabeller baseret på resultatet af en forespørgsel. Indsæt for at replikere eksemplerne, men i eksisterende tabeller... 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 forespørgselskolonnetyper, der oprettes, stemmer overens 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 at masseimport af data med minimal logføring og parallelitet.

Indfødning af data fra tabeller på forskellige lagre og lakehouses

For både OPRET TABEL SOM MARKÉR og INDSÆT... SELECT, kan sætningen SELECT også referere til tabeller på lagre, 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_namemed tre dele . Lad os f.eks. antage, at du har følgende arbejdsområdeaktiver:

  • Et lakehouse, der er navngivet cases_lakehouse med de seneste 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 i 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.