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 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 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 , 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).
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_name
med 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.