Innta 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 på 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.
Opprett 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.
Merk
Eksemplene i denne artikkelen bruker Bing COVID-19-eksempeldatasettet. Hvis du vil laste inn eksempeldatasettet, følger du trinnene i Inntaksdata inn i lageret ved hjelp av COPY-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
kolonner dayofmonth
, 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 som er observert i hver måned, uavhengig av år, for å evaluere hvordan sesongavhengighet påvirker spredning i et gitt land/område. Den bruker tabellen som ble opprettet i forrige eksempel, 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 January
, etterfulgt av December
og October
. April
er måneden med lavest antall tilfeller totalt:
SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;
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 med kolonnene i måltabellen. Hvis kolonnenavn er angitt og bare inneholder 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.
Innta data fra tabeller på ulike varehus og lakehouses
For både CREATE TABLE AS SELECT og INSERT... SELECT, SELECT
kan setningen 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 den tredelte navnekonvensjonen [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 navnet
reference_warehouse
tabeller som brukes til referansedata. - Et lager med navnet
research_warehouse
der måltabellen opprettes.
En ny tabell kan opprettes som bruker tredelt navngivning 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 spørringer på tvers av lager, kan du se Skrive en SQL-spørring over flere databaser.