Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Tip
Microsoft Fabric Data Warehouse är ett relationslager i företagsskala på en datasjögrund med en framtidsklar arkitektur, inbyggd AI och nya funktioner. Om du är nybörjare på datalager börjar du med Fabric Data Warehouse. Befintliga dedicerade SQL-poolarbetsbelastningar kan uppgraderas till Fabric för att få åtkomst till nya funktioner inom datavetenskap, realtidsanalys och rapportering.
I den här artikeln får du lära dig hur du frågar efter specifika filer eller mappar med hjälp av metadata. Serverlös SQL-pool kan hantera flera filer och mappar. Mer information finns i Frågemappar och flera filer.
Ibland kan du behöva veta vilken fil- eller mappkälla som korrelerar med en viss rad i en resultatuppsättning. Du kan använda funktionerna filepath och filename för att returnera filnamn och/eller sökvägen i resultatuppsättningen, eller så kan du använda dem för att filtrera data baserat på filnamnet eller mappsökvägen. Dessa funktioner beskrivs i filnamnsfunktionen och filsökvägsfunktionen.
Följande avsnitt innehåller korta beskrivningar och kodexempel.
Prerequisites
Ditt första steg är att skapa en databas med en datakälla som refererar till ett lagringskonto. Initiera sedan objekten genom att köra ett setup-skript på databasen. Det här installationsskriptet skapar de datakällor, databasomfattningsautentiseringsuppgifter och externa filformat som används i dessa exempel.
Functions
Filnamn
Funktionen filename returnerar filnamnet där raden kommer från.
Följande exempel läser datafilerna för NYC Yellow Taxi för september 2017 och returnerar antalet turer per fil. Delen OPENROWSET av frågan anger vilka filer som ska läsas.
SELECT
nyc.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM
OPENROWSET(
BULK 'parquet/taxi/year=2017/month=9/*.parquet',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT='PARQUET'
) nyc
GROUP BY nyc.filename();
Följande exempel visar hur filename() kan användas i klausulen WHERE för att filtrera filerna som ska läsas. Den får tillgång till hela mappen i delen OPENROWSET av frågan och filtrerar filer i klausulen WHERE .
Dina resultat kommer att vara desamma som i det tidigare exemplet.
SELECT
r.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2)
WITH (C1 varchar(200) ) AS [r]
WHERE
r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
r.filename()
ORDER BY
[filename];
Filväg
Funktionen filepath returnerar en fullständig eller partiell sökväg:
- När den anropas utan en parameter returneras den fullständiga filsökvägen där raden kommer från. När
DATA_SOURCEanvänds iOPENROWSETreturnerar den sökvägen i förhållande tillDATA_SOURCE. - När den anropas med en parameter returneras en del av sökvägen som matchar jokertecknet på den position som anges i parametern. Parametervärdet 1 returnerar till exempel en del av sökvägen som matchar det första jokertecknet.
Följande exempel läser NYC Yellow Taxi-datafiler för de senaste tre månaderna av 2017. Den returnerar antalet turer per filväg. Delen OPENROWSET av frågan anger vilka filer som ska läsas.
SELECT
r.filepath() AS filepath
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
GROUP BY
r.filepath()
ORDER BY
filepath;
Följande exempel visar hur filepath() kan användas i klausulen WHERE för att filtrera filerna som ska läsas.
Du kan använda jokrarna i den OPENROWSET del av frågan och filtrera filerna i klausulen WHERE . Dina resultat kommer att vara desamma som i det tidigare exemplet.
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_*-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;