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.

Opprette en ny tabell med resultatet av en spørring

Med Warehouse i Microsoft Fabric kan du enkelt opprette en ny tabell basert på et resultat av T-SQL-spørring ved hjelp av følgende T-SQL-setninger:

  • CREATE TABLE AS SELECT (CTAS)-setning som lar deg opprette en ny tabell i lageret fra utdataene fra en SELECT setning.
  • SELECT INTO spørringssetning som lar deg velge resultater fra en tabellkilde, og omdirigere resultatene til en ny tabell. Dette er en standardfunksjon i T-SQL-språk.

Disse to setningene er like, så følgende eksempler er fokusert på CTAS-setningen.

CTAS-setningen kjører inntaksoperasjonen inn i den nye tabellen parallelt, noe som gjør den svært effektiv for datatransformasjon og oppretting av nye tabeller i arbeidsområdet.

Du kan bruke følgende alternativer for SELECT delen av CTAS-setningen:

  • Lese en lagertabell, for eksempel en oppsamlingstabell.
  • Lese en Lakehouse Delta Lake-mappe ved hjelp av en autogenerert tabell i SQL Analytics-endepunktet for Lakehouse.
  • Lese CSV-, Parquet- eller JSONL-filer direkte fra Azure Data Lake eller Azure Blob Storage ved hjelp av OPENROWSET funksjonen.

For å laste inn et eksempeldatasett, følg trinnene i Ingest data into the Warehouse ved å bruke COPY-setningen for å lage eksempeldataene i lageret ditt.

Opprett tabell fra Lager-tabell

Det første eksempelet viser hvordan man lager en ny tabell som er en kopi av den eksisterende dbo.TaxiTrips tabellen, men filtrert til kun å inkludere data fra året 2023:

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

Opprett tabell fra Delta Lake-mappen

Delta Lake-mappene som beholdes i OneLake, representeres automatisk som tabeller hvis de lagres i /Tables-mappen i et lakehouse. Følgende kode oppretter en ny tabell 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 Delta Lake-mappen ved hjelp av notasjonen med tre delers navn som refererer til lakehouse der filene er lagret. Alle eksempler som vises i forrige del, gjelder for Delta Lake-mapper.

Opprett tabell fra CSV/Parquet/JSONL-fil

Du kan også lage en ny tabell direkte fra en ekstern fil ved å bruke funksjonen OPENROWSET . For eksempel bruker følgende eksempel-T-SQL plassholdere for å demonstrere hvordan du 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 opprette en ny tabell ved å transformere data fra en ekstern, offentlig tilgjengelig 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 lage en ny tabell ved å transformere data fra en ekstern, offentlig tilgjengelig 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;

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, INSERT ... SELECT kan mønsteret brukes.

Innta data fra Lager-tabell

Følgende kode inntar nye data fra en lagertabell til en eksisterende tabell:

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

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

Delta Lake-mappene som beholdes i OneLake, representeres automatisk som tabeller hvis de er lagret i /Tables en mappe i et innsjøhus.

Følgende kode henter inn nye data fra Delta Lake-mappeseksjonen /Tables/TaxiTrips i MyLakehouse* innsjøhuset.

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

Importere data fra CSV/Parquet/JSONL-fil

Du kan bruke OPENROWSET funksjonen som kilde for å importere Parquet-, CSV- eller JSON-filer fra lagring:

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 lese flere filer ved å bruke jokertegn som *.parquet, eller ved å målrette mot partisjonerte kataloger som /year=*/month=*. Hvis du vil optimalisere ytelsen, kan du bruke filtre i WHERE-setningsdelen for å eliminere unødvendige rader og partisjoner under spørringskjøring.

Dette eksemplet ligner på de som brukes i inntak med COPY INTO. KOMMANDOEN KOPIER INN er enklere å bruke, spesielt for enkel kilde-til-mål-datainnlasting. Hvis du imidlertid trenger å transformere kildedata (for eksempel konvertere verdier eller slå sammen med andre tabeller), gir bruk INSERT ... SELECT deg fleksibiliteten til å utføre transformasjoner under inntak.

Ta inn data fra OneLake

Du kan bruke OPENROWSET funksjonen som en kilde for å innta data fra Fabric OneLake-lagring. Erstatt {workspaceId} og {lakehouseId} med den tilsvarende arbeidsområdet og GUID-en for lakehouse 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 eksemplet bygger på det forrige som leser data fra Azure Data Lake Storage. Bruk denne tilnærmingen når du trenger å transformere kildedata, for eksempel ved å konvertere verdier, ved å koble til andre tabeller, eller ved å lese spesifikke partisjoner. I slike tilfeller gir bruk INSERT ... SELECT fleksibiliteten til å bruke transformasjoner under datainntak.

Innta data fra tabeller på ulike varehus og lakehouses

For både CREATE TABLE AS SELECT og INSERT ... SELECTkan SELECT 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 den tredelte navnekonvensjonen [warehouse_or_lakehouse_name.][schema_name.]table_name. Anta for eksempel at du har følgende arbeidsområderessurser:

  • Et innsjøhus oppkalt taxi_lakehouse med de nyeste dataene.
  • 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.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 lære mer om spørringer på tvers av lager, kan du se Skrive en SQL-spørring over flere databaser.

Revider og overvåk T-SQL-inntak

Både CTAS operasjoner INSERT ... SELECT utført via T-SQL vises i lagerets spørringshistorikk/aktivitet, og kan overvåkes sammen med andre lageroperasjoner.

Alternativer for datainntak

Andre måter å importere data til lageret ditt på inkluderer: