Ta inn data i lageret ved hjelp av Transact-SQL

Gjelder for: Lager i Microsoft Fabric

Transact-SQL-språket tilbyr alternativer du kan bruke til å laste inn data i stor skala fra eksisterende tabeller i lakehouse og lageret til nye tabeller i lageret. Disse alternativene er praktiske hvis du trenger å opprette nye versjoner av en tabell med aggregerte data, versjoner av tabeller med et delsett av radene, eller for å opprette en tabell som et resultat av en kompleks spørring. La oss utforske noen eksempler.

Viktig

Microsoft Fabric er i forhåndsversjon.

Opprette en ny tabell med resultatet av en spørring ved hjelp av CREATE TABLE AS SELECT (CTAS)

Med SETNINGEN CREATE TABLE AS SELECT (CTAS) kan du opprette en ny tabell i lageret fra utdataene for en SELECT setning. Den kjører inntaksoperasjonen i den nye tabellen parallelt, noe som gjør den svært effektiv for datatransformasjon og oppretting av nye tabeller i arbeidsområdet.

Obs!

Eksemplene i denne artikkelen bruker eksempeldatasettet Bing COVID-19. Hvis du vil laste inn eksempeldatasettet, følger du trinnene i Inntaksdata inn i lageret ved hjelp av KOPIER-setningen for å opprette eksempeldataene i lageret.

Det første eksemplet illustrerer hvordan du oppretter en ny tabell som er en kopi av den eksisterende dbo.[bing_covid-19_data_2023] tabellen, men filtrert til data bare fra år 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å opprette en ny tabell med nye year, month, dayofmonth kolonner, med verdier hentet fra updated kolonnen i kildetabellen. Dette kan være nyttig hvis du prøver å visualisere infeksjonsdata etter år, eller for å se måneder når de fleste COVID-19-tilfellene observeres:

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 annet eksempel kan du opprette en ny tabell som oppsummerer antall tilfeller observert i hver måned, uavhengig av år, for å evaluere hvordan sesongavhengighet kan påvirke spredning i et gitt land/område. Den bruker tabellen som ble opprettet i det forrige eksemplet, med den nye month kolonnen 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];

Basert på denne nye tabellen kan vi se at USA observert flere bekreftede tilfeller i alle år i måneden , etterfulgt av JanuaryDecember og October. April er måneden med det laveste antallet tilfeller totalt:

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

Skjermbilde av spørringsresultatene som viser antall infeksjoner etter måned i USA, sortert etter måned, i synkende rekkefølge. Månedsnummer 1 vises øverst.

Hvis du vil ha flere eksempler og syntaksreferanse, kan du se CREATE TABLE AS SELECT (Transact-SQL).

Inntak av data i eksisterende tabeller med T-SQL-spørringer

De forrige eksemplene oppretter nye tabeller basert på resultatet av en spørring. Hvis du vil replikere eksemplene, men på eksisterende tabeller, setter du inn... SELECT-mønster kan brukes. Følgende kode inntar for eksempel nye data i en eksisterende tabell:

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

Spørringsvilkårene for setningen SELECT kan være en hvilken som helst gyldig spørring, så lenge de resulterende spørringskolonnetypene justeres etter kolonnene i måltabellen. Hvis kolonnenavn er angitt og bare inkluderer et delsett av kolonnene fra måltabellen, lastes alle andre kolonner inn som NULL. Hvis du vil ha mer informasjon, kan du se Bruke INSERT INTO... VELG for masseimport av data med minimal logging og parallellitet.

Inninntak av data fra tabeller på ulike lagre og innsjøer

For både CREATE TABLE AS SELECT og INSERT... SELECT, SELECT kan uttrykket også referere til tabeller på lagre som er forskjellige fra lageret der måltabellen er lagret, ved hjelp av krysslagerspørringer. Dette kan oppnås ved hjelp av tredelt navnekonvensjon [warehouse_or_lakehouse_name.][schema_name.]table_name. Anta for eksempel at du har følgende arbeidsområderessurser:

  • Et lakehouse navngitt cases_lakehouse med de nyeste saksdataene.
  • Et lager med navn reference_warehouse med tabeller som brukes til referansedata.
  • Et lager med navn research_warehouse der måltabellen opprettes.

En ny tabell kan opprettes som bruker tredelt navngiving til å kombinere data fra tabeller på disse arbeidsområderessursene:

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 lære mer om krysslagerspørringer, kan du se Skrive en SQL-spørring over flere databaser.

Neste trinn