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

Med Warehouse i Microsoft Fabric kan du nemt oprette en ny tabel baseret på resultatet af T-SQL-forespørgslen ved hjælp af følgende T-SQL-sætninger:

  • CREATE TABLE AS SELECT (CTAS)-sætning, der giver dig mulighed for at oprette en ny tabel på dit lager ud fra outputtet af en SELECT sætning.
  • SELECT INTO query-delsætning, der giver dig mulighed for at vælge resultater fra en hvilken som helst tabelkilde og omdirigere resultaterne til en ny tabel. Dette er en standardfunktion i T-SQL-sprog.

Disse to udsagn er ens, så følgende eksempler fokuserer på CTAS-sætningen.

CTAS-sætningen 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.

Du kan bruge følgende indstillinger for den SELECT del af CTAS-sætningen:

  • Læser en lagertabel, f.eks. en midlertidig tabel.
  • Læsning af en Lakehouse Delta Lake-mappe ved hjælp af en automatisk genereret tabel i SQL Analytics-slutpunktet for Lakehouse.
  • Læsning af CSV-, Parquet- eller JSONL-filer direkte fra Azure Data Lake eller Azure Blob Storage ved hjælp af funktionen OPENROWSET .

For at indlæse et eksempeldatasæt skal du følge trinene i Ingest data into your Warehouse ved hjælp af COPY-sætningen for at oprette prøvedataene i dit warehouse.

Opret tabel fra tabellen Warehouse

Det første eksempel viser, hvordan man opretter en ny tabel, der er en kopi af den eksisterende dbo.TaxiTrips tabel, men filtreret til kun at inkludere data fra året 2023:

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Opret tabel fra mappen Delta Lake

De Delta Lake-mapper, der bevares i OneLake, repræsenteres automatisk som tabeller, hvis de gemmes i mappen /Tables i et lakehouse. Følgende kode opretter en ny tabel TaxiTrips_2023 fra Delta Lake-mappen /Tables/TaxiTrips i MyLakehouse lakehouse:

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Du kan referere til mappen Delta Lake ved hjælp af notationen med tre dele, der refererer til det lakehouse, hvor filerne er gemt. Alle eksempler, der vises i forrige afsnit, gælder for Delta Lake-mapper.

Opret tabel fra CSV/Parquet/JSONL-fil

Du kan også oprette en ny tabel direkte fra en ekstern fil ved at bruge OPENROWSET funktionen. For eksempel bruger følgende eksempel på T-SQL pladsholdere til at demonstrere, hvordan man kan importere en offentlig Parquet-fil.

CREATE TABLE dbo.<table_name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.parquet') AS data;

Du kan oprette en ny tabel ved at transformere data fra en ekstern, offentligt tilgængelig CSV-fil:

CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.csv') AS data;

Eller du kan oprette en ny tabel ved at transformere data fra en ekstern, offentligt tilgængelig JSONL-fil:

CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.jsonl') AS data;

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. Mønsteret kan bruges til at replikere eksemplerne, men i INSERT ... SELECT eksisterende tabeller.

Indfødning af data fra tabellen Warehouse

Følgende kode indlæser nye data fra en lagertabel i en eksisterende tabel:

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

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 mappen Delta Lake

De Delta Lake-mapper, der bevares i OneLake, repræsenteres automatisk som tabeller, hvis de er gemt i /Tables en mappe i et søhus.

Følgende kode indsamler nye data fra Delta Lake-mappesektionen /Tables/TaxiTrips i MyLakehouse* søhuset.

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Indtag data fra CSV/Parquet/JSONL-fil

Du kan bruge OPENROWSET funktionen som kilde til at indtage Parquet-, CSV- eller JSON-filer fra lageret:

INSERT INTO dbo.<table name>
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>') AS data
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Du kan læse flere filer ved hjælp af jokertegn som *.parquet, eller ved at målrette mod partitionerede mapper som f.eks /year=*/month=*. . Hvis du vil optimere ydeevnen, skal du anvende filtre i WHERE-delsætningen for at fjerne unødvendige rækker og partitioner under udførelse af forespørgsler.

Dette eksempel svarer til dem, der bruges ved indtagelse med COPY INTO. Kommandoen KOPIÉR TIL er nemmere at bruge, især til simple databelastninger fra kilde til destination. Men hvis du har brug for at transformere kildedata (f.eks. konvertere værdier eller joinforbinde med andre tabeller), giver brugen INSERT ... SELECT dig fleksibilitet til at udføre transformationer under indtagelse.

Indtag data fra OneLake

Du kan bruge OPENROWSET funktionen som kilde til at indtage data fra Fabric OneLake-lageret. Erstat {workspaceId} og {lakehouseId} med det tilsvarende arbejdsområde og lakehouse-GUID'er i følgende eksempel:

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM OPENROWSET(BULK 'https://onelake.dfs.fabric.microsoft.com/{workspaceId}/{lakehouseId}/Files/year=*/month=*/*.parquet') AS data
WHERE data.filepath(1) = '2023'

Dette eksempel bygger på det forrige, der læser data fra Azure Data Lake Storage. Brug denne tilgang, når du skal transformere kildedata, for eksempel ved at konvertere værdier, ved at joine med andre tabeller eller ved at læse specifikke partitioner. I sådanne tilfælde giver brugen INSERT ... SELECT fleksibilitet til at anvende transformationer under dataindtagelse.

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

For både CREATE TABLE AS SELECT og INSERT ... SELECTkan 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 søhus med de taxi_lakehouse nyeste data.
  • 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.taxi_trips
AS
SELECT *
FROM taxi_lakehouse.dbo.TaxiTrips AS latest
INNER JOIN reference_warehouse.dbo.TaxiTrips AS reference
ON latest.vendorId_lpep = reference.vendorId_lpep;

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.

Revider og overvåg T-SQL-indlæsning

Både CTAS operationer INSERT ... SELECT udført via T-SQL vises i lagerets forespørgselshistorik/aktivitet og kan overvåges sammen med andre lageroperationer.

Indstillinger for dataindtagelse

Andre måder at indsamle data i dit lager på inkluderer: