Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Gælder for:✅ Warehouse i Microsoft Fabric
Ved at bruge funktionen OPENROWSET kan du eksponere Parquet-, CSV- eller JSONL-filer som en relationel kilde til T-SQL-indlæsningssætninger. Filerne kan være i OneLake, Azure Data Lake Storage eller Azure Blob Storage. Følgende eksempel henter indholdet af en Parquet-fil ved at bruge dens absolutte ADLS-URL:
SELECT *
FROM OPENROWSET(
BULK 'https://<storage-account>.dfs.core.windows.net/<container>/<folder>/<file-name>.parquet'
) AS source;
Fordi OPENROWSET data returneres som et rækkesæt, kan du bruge det som kilde til enhver understøttet T-SQL-indlæsningssætning, herunder:
-
CREATE TABLE AS SELECT(CTAS) ellerSELECT ... INTOat oprette en ny lagertabel ud fra en eller flere refererede filer. -
INSERT ... SELECTfor at tilføje filindhold til en eksisterende tabel. -
MERGEfor at indsætte nye rækker, opdater eksisterende rækker eller begge dele baseret på data i de refererede filer.
Ud over at indlæse kan du anvende vilkårlige T-SQL-transformationer, før du indlæser dataene i en tabel. For eksempel kan du konvertere datatyper, udlede nye kolonneværdier, filtrere rækker, sammenlægge fildata med eksisterende tabeller og udføre aggregeringer som en del af indlæsningsprocessen.
Forudsætninger
- Et Fabric-lager og tilladelse til at oprette eller ændre destinationstabellerne.
- Læseadgang til kildefilerne, der bruges i en lagerforespørgsel.
Opret en tabel med CTAS
Følgende CTAS-erklæring læser en årlig Parquet-partition og skaber en faktatabel. Ud over fysiske kildekolonner udleder den et forretningsmål og gemmer den oprindelige filsti for lineage:
CREATE TABLE dbo.FactOnlineSales
AS
SELECT
source.SalesOrderID, source.ProductID, CAST(source.OrderDateTime AS date) AS OrderDate,
source.Quantity, CAST(source.Quantity * source.UnitPrice AS decimal(18, 2)) AS SalesAmount, CAST(source.filepath() AS varchar(1024)) AS SourceFilePath
FROM OPENROWSET(
BULK 'https://<storage-account>.dfs.core.windows.net/<container>/sales/year=2026/*.parquet'
) WITH (
SalesOrderID bigint,
ProductID int,
OrderDateTime datetime2(6),
Quantity int,
UnitPrice decimal(18, 2)
) AS source
WHERE source.Quantity > 0;
OrderDate og SalesAmount beregnes, mens rækkerne indlæses, og mængdeprædikatet udelukker ugyldige transaktioner.
filepath() tilføjer den komplette kilde-URI til hver destinationsrække, hvilket hjælper med at spore en kendsgerning tilbage til filen, der leverede den.
Opret en tabel med SELECT INTO
Følgende sætning opretter en kundeimporttabel ud fra flere CSV-filer. Den renser en kildeværdi og tilføjer både kildefil- og load-time metadata:
SELECT
source.CustomerID, TRIM(source.CustomerName) AS CustomerName, source.Region, CAST(source.filepath() AS varchar(1024)) AS SourceFilePath,
CAST(GETDATE() AS datetime2(6)) AS IngestionTime
INTO dbo.CustomerImport
FROM OPENROWSET(
BULK 'https://<storage-account>.blob.core.windows.net/<container>/customers/*.csv',
HEADER_ROW = TRUE
) AS source
WHERE source.CustomerID IS NOT NULL;
Jokeren kombinerer alle matchende CSV-filer i én relationel kilde.
HEADER_ROW = TRUE læser kolonnenavne fra første række i hver fil.
TRIM standardiserer kundenavne, filepath() registrerer rækkelinje og GETDATE() registrerer, hvornår lageret har indtaget rækken. Null-nøgle-prædikatet forhindrer ubrugelige kundeposter i at komme ind i den nye tabel.
Tilføj en inkrementel batch med INSERT ... SELECT
Følgende eksempel indlæser udvalgte JSONL-partitioner i en eksisterende tabel. Udover de fysiske ordensegenskaber indlæser den året og måneden, der er kodet i mappestien, og fanger filens oprindelse og indtastningstid:
INSERT INTO dbo.Sales
(OrderID, CustomerID, OrderDate, Region, TotalAmount,
OrderYear, OrderMonth, SourceFilePath, IngestionTime)
SELECT
source.OrderID, source.CustomerID, source.OrderDate, source.Region, source.TotalAmount,
CAST(source.filepath(1) AS smallint), CAST(source.filepath(2) AS smallint), source.filepath(), GETDATE()
FROM OPENROWSET(
BULK 'https://<storage-account>.dfs.core.windows.net/<container>/orders/year=*/month=*/*.jsonl'
) AS source
WHERE source.filepath(1) = '2026'
AND source.filepath(2) IN ('07', '08', '09');
Det første og andet wildcard matcher year og-mappeværdierne month .
filepath(1) og filepath(2) eksponere disse partitionsværdier som tegndata, så forespørgslen kaster dem til smallint før de gemmes som OrderYear og OrderMonth.
filepath() uden argument gemmer den komplette kildesti. Jokerkarterne holder forespørgslen genanvendelig, mens prædikaterne vælger det aktuelle batch og tillader OPENROWSET at springe ikke-matchende mapper over.
Synkroniser en filbatch med MERGE
Brug MERGE når en filbatch kan indeholde både nye og ændrede rækker. Følgende eksempel læser de aktuelle produktfiler, standardiserer beskrivende værdier og medfører et tidsstempel for kildemodifikation i matchet:
MERGE dbo.DimProductFromFiles AS target
USING (
SELECT
source.ProductID, TRIM(source.ProductName) AS ProductName,
source.Category, source.ModifiedDate
FROM OPENROWSET(
BULK 'https://<storage-account>.dfs.core.windows.net/<container>/products/current/*.parquet'
) AS source
) AS source
ON target.ProductKey = source.ProductID
WHEN MATCHED AND source.ModifiedDate > target.ModifiedDate THEN
UPDATE SET ProductName = source.ProductName, Category = source.Category,
ModifiedDate = source.ModifiedDate
WHEN NOT MATCHED BY TARGET THEN
INSERT (ProductKey, ProductName, Category, ModifiedDate)
VALUES (source.ProductID, source.ProductName, source.Category, source.ModifiedDate);
Forespørgslen opdaterer kun et produkt, når filen indeholder en nyere version, og indsætter produkt-ID'er, der ikke er i dimensionen. Sørg for, at filsættet returnerer højst én række for hver ProductID. Tilføj WHEN NOT MATCHED BY SOURCE THEN DELETE kun, når stien repræsenterer et komplet autoritativt snapshot, ikke en inkrementel batch.
Læs filer fra OneLake
Brug hele OneLake-URL'en til lejlighedsvise forespørgsler. Dette eksempel indlæser en årlig partition og gemmer OneLake-URI'en ved hver taxatur:
INSERT INTO dbo.TaxiTrips
(TripID, PickupDateTime, TripDistance, TotalAmount, SourceFilePath)
SELECT
source.TripID, source.PickupDateTime, source.TripDistance,
source.TotalAmount, source.filepath()
FROM OPENROWSET(
BULK 'https://onelake.dfs.fabric.microsoft.com/<workspace-id>/<lakehouse-id>/Files/year=2026/month=*/*.parquet'
) AS source;
URL'en identificerer arbejdsområdet, lakehouse, /Files området og den opdelte mappe. Månedens wildcard læser alle månedlige filer for 2026, mens filepath() den bevarer den præcise OneLake-fil, der producerede hver destinationsrække.
For genanvendelige forespørgsler, definer en ekstern datakilde ved lakehouse-roden, så workspace- og lakehouse-identiceller vedligeholdes i ét objekt:
CREATE EXTERNAL DATA SOURCE SalesFilesRoot
WITH (
LOCATION = 'https://onelake.dfs.fabric.microsoft.com/<workspace-id>/<lakehouse-id>'
);
SalesFilesRoot er et vedvarende objekt i det nuværende warehouse og kræver tilladelse til at oprette eksterne datakilder. Det bliver et genanvendeligt navn for OneLake-roden, så en lokationsændring kan foretages én gang i stedet for i hver eneste indlæsningsforespørgsel.
Du kan derefter bruge en relativ sti, mens du bevarer samme wildcard- og partitionsadfærd:
CREATE TABLE dbo.TaxiTrips AS
SELECT *
FROM OPENROWSET(
BULK '/Files/year=2026/month=*/*.parquet',
DATA_SOURCE = 'SalesFilesRoot'
) AS source;
DATA_SOURCE kombinerer den lagrede OneLake-rod med den relative /Files sti. Dette holder indlæsningsforespørgsler fokuseret på mapper, partitioner og transformationslogik i stedet for gentagne lokationsidentinere.
Vælg OPENROWSET eller COPY
Brug OPENROWSET med en T-SQL-indlæsningssætning, når belastningen inkluderer filtrering, joins, beregninger, skemaformning eller synkronisering. For en direkte kilde-til-destination bulk-belastning uden transformationer, brug COPY-sætningen.
Overvågning af indtagelse
Filindlæsningssætninger vises sammen med andre T-SQL-anmodninger i lagerets forespørgselshistorik/aktivitet. Brug forespørgselsindsigter til at inspicere deres eksekveringsdetaljer.