Share via


Mata in data i ditt lager med Hjälp av Transact-SQL

Gäller för: Warehouse i Microsoft Fabric

Transact-SQL-språket erbjuder alternativ som du kan använda för att läsa in data i stor skala från befintliga tabeller i ditt lakehouse och lager till nya tabeller i ditt lager. De här alternativen är praktiska om du behöver skapa nya versioner av en tabell med aggregerade data, versioner av tabeller med en delmängd av raderna eller för att skapa en tabell som ett resultat av en komplex fråga. Nu ska vi utforska några exempel.

Skapa en ny tabell med resultatet av en fråga med hjälp av CREATE TABLE AS SELECT (CTAS)

Med instruktionen CREATE TABLE AS SELECT (CTAS) kan du skapa en ny tabell i ditt lager från utdata från en SELECT -instruktion. Den kör inmatningsåtgärden till den nya tabellen parallellt, vilket gör den mycket effektiv för datatransformering och skapande av nya tabeller på din arbetsyta.

Kommentar

Exemplen i den här artikeln använder exempeldatauppsättningen Bing COVID-19. Om du vill läsa in exempeldatauppsättningen följer du stegen i Mata in data i ditt lager med hjälp av COPY-instruktionen för att skapa exempeldata i ditt lager.

Det första exemplet visar hur du skapar en ny tabell som är en kopia av den befintliga dbo.[bing_covid-19_data_2023] tabellen, men filtreras endast efter data från å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 också skapa en ny tabell med nya yearkolumner , month, dayofmonth med värden som hämtats från updated kolumnen i källtabellen. Detta kan vara användbart om du försöker visualisera infektionsdata per år eller om du vill se månader då de flesta COVID-19-fallen observeras:

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 ett annat exempel kan du skapa en ny tabell som sammanfattar antalet fall som observerats under varje månad, oavsett år, för att utvärdera hur säsongsvariationer påverkar spridningen i ett visst land/en viss region. Den använder tabellen som skapades i föregående exempel med den nya month kolumnen som källa:

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];

Baserat på den här nya tabellen kan vi se att USA observerade fler bekräftade fall under alla år under månaden , följt av JanuaryDecember och October. April är månaden med det lägsta antalet fall totalt:

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

Skärmbild av frågeresultatet som visar antalet infektioner per månad i USA, sorterat efter månad, i fallande ordning. Månadsnumret 1 visas överst.

Fler exempel och syntaxreferenser finns i CREATE TABLE AS SELECT (Transact-SQL).

Mata in data i befintliga tabeller med T-SQL-frågor

I föregående exempel skapas nya tabeller baserat på resultatet av en fråga. Om du vill replikera exemplen men på befintliga tabeller, infoga ... SELECT-mönster kan användas. Följande kod matar till exempel in nya data i en befintlig tabell:

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

Frågevillkoren för -instruktionen SELECT kan vara valfri giltig fråga, så länge de resulterande frågekolumntyperna överensstämmer med kolumnerna i måltabellen. Om kolumnnamn anges och endast innehåller en delmängd av kolumnerna från måltabellen läses alla andra kolumner in som NULL. Mer information finns i Använda INSERT INTO... VÄLJ till Massimportera data med minimal loggning och parallellitet.

Mata in data från tabeller på olika lager och sjöhus

För både CREATE TABLE AS SELECT och INSERT... SELECT, instruktionen SELECT kan också referera till tabeller på lager som skiljer sig från det lager där måltabellen lagras med hjälp av frågor mellan olika lager. Detta kan uppnås med hjälp av namngivningskonventionen [warehouse_or_lakehouse_name.][schema_name.]table_namei tre delar . Anta till exempel att du har följande arbetsytetillgångar:

  • Ett sjöhus med namnet cases_lakehouse med de senaste ärendedata.
  • Ett lager med namnet reference_warehouse med tabeller som används för referensdata.
  • Ett lager med namnet research_warehouse där måltabellen skapas.

En ny tabell kan skapas som använder namngivning i tre delar för att kombinera data från tabeller på dessa arbetsytetillgångar:

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];

Mer information om frågor mellan lager finns i Skriva en SQL-fråga mellan databaser.