Fájlok metaadatainak használata kiszolgáló nélküli SQL-készleteken végrehajtott lekérdezésekben
A kiszolgáló nélküli SQL-készlet több fájlt és mappát is kezelhet a Lekérdezés mappák és több fájl című cikkben leírtak szerint. Ebből a cikkből megtudhatja, hogyan használhatja a fájl- és mappanevek metaadatait a lekérdezésekben.
Előfordulhat, hogy tudnia kell, hogy melyik fájl vagy mappaforrás kapcsolódik az eredményhalmaz egy adott sorához.
A függvény filepath
és filename
használatával fájlneveket és/vagy elérési utat adhat vissza az eredményhalmazban. Vagy a fájlnév és/vagy mappa elérési útja alapján is szűrheti az adatokat. Ezeket a függvényeket a szintaxis szakasz filename függvénye és a filepath függvény ismerteti. A következő szakaszokban rövid leírásokat talál a minták mentén.
Előfeltételek
Első lépésként hozzon létre egy adatbázist egy tárfiókra hivatkozó adatforrással. Ezután inicializálja az objektumokat az adatbázis beállítási szkriptjének végrehajtásával. Ez a beállítási szkript létrehozza az ezekben a mintákban használt adatforrásokat, adatbázis-hatókörű hitelesítő adatokat és külső fájlformátumokat.
Functions
Fájlnév
Ez a függvény azt a fájlnevet adja vissza, amelyből a sor származik.
Az alábbi minta beolvassa a 2017 utolsó három hónapjára vonatkozó NYC Yellow Taxi adatfájlokat, és visszaadja az egyes fájlokban szereplő utazások számát. A lekérdezés OPENROWSET része határozza meg, hogy mely fájlok lesznek beolvasva.
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();
Az alábbi példa bemutatja, hogyan használható a filename() a WHERE záradékban az olvasni kívánt fájlok szűrésére. A lekérdezés OPENROWSET részén található teljes mappához fér hozzá, és szűri a WHERE záradék fájljait.
Az eredmények ugyanazok lesznek, mint az előző példában.
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];
Fájlútvonal
A filepath függvény teljes vagy részleges elérési utat ad vissza:
- Ha paraméter nélkül hívja meg, a teljes fájl elérési útját adja vissza, amelyből a sor származik. Ha DATA_SOURCE az OPENROWSET-ben van használatban, az DATA_SOURCE-hoz viszonyítva adja vissza az elérési utat.
- Ha paraméterrel hívja meg, az az elérési út azon részét adja vissza, amely megfelel a paraméterben megadott pozíció helyettesítő karakterének. Az 1. paraméterérték például az elérési útnak az első helyettesítő karakternek megfelelő részét adja vissza.
Az alábbi minta a 2017 utolsó három hónapjára vonatkozó NYC Yellow Taxi-adatfájlokat olvassa be. A fájlelérési útonkénti utazások számát adja vissza. A lekérdezés OPENROWSET része határozza meg, hogy mely fájlok lesznek beolvasva.
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;
Az alábbi példa bemutatja, hogyan használható a filepath() a WHERE záradékban az olvasni kívánt fájlok szűrésére.
Használhatja a helyettesítő karaktereket a lekérdezés OPENROWSET részében, és szűrheti a fájlokat a WHERE záradékban. Az eredmények ugyanazok lesznek, mint az előző példában.
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;
Következő lépések
A következő cikkben megtudhatja, hogyan kérdezheti le a Parquet-fájlokat.