Megosztás a következőn keresztül:


Fájlok metaadatainak használata kiszolgáló nélküli SQL-készleteken végrehajtott lekérdezésekben

Ebben a cikkben megismerheti, hogyan kérdezhet le bizonyos fájlokat vagy mappákat metaadatok használatával. A kiszolgáló nélküli SQL-készlet több fájlt és mappát is kezelhet. További információ: Lekérdezési mappák és több fájl.

Előfordulhat, hogy tudnia kell, hogy melyik fájl vagy mappaforrás egy adott sorhoz kapcsolódik egy eredményhalmazban. Használhatja a függvényeket filepath , és filename visszaadhatja a fájlneveket és/vagy az eredményhalmaz elérési útját, vagy a fájlnév vagy mappa elérési útja alapján szűrheti az adatokat. Ezeket a függvényeket a fájlnév és a filepath függvény ismerteti.

A következő szakaszok rövid leírásokat és kódmintákat nyújtanak.

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 egy beállítási szkript végrehajtásával az adatbázisban. 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.

Függvények

Fájlnév

A filename függvény azt a fájlnevet adja vissza, amelyből a sor származik.

Az alábbi minta beolvassa a 2017. szeptemberi NYC Yellow Taxi-adatfájlokat, és visszaadja az egy fájlra eső utazások számát. A OPENROWSET lekérdezés része határozza meg, hogy mely fájlok legyenek olvashatók.

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 filename() használható a záradék az WHERE olvasandó fájlok szűrésére. Hozzáfér a lekérdezés teljes mappájához OPENROWSET , és szűri a záradék fájljait WHERE .

Az eredmények megegyeznek az előző példával.

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];

Filepath

A filepath függvény egy teljes vagy részleges elérési utat ad vissza:

  • Paraméter nélkül hívva a teljes fájl elérési útját adja vissza, ahonnan a sor származik. Amikor DATA_SOURCE a rendszer használja OPENROWSET, a függvény a hozzá viszonyított DATA_SOURCEelérési utat adja vissza.
  • Ha paraméterrel hívjuk 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 például az első helyettesítő karakternek megfelelő elérési út egy 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ájlútvonalonkénti utazások számát adja vissza. A OPENROWSET lekérdezés része határozza meg, hogy mely fájlok legyenek olvashatók.

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 filepath() használható a záradék az WHERE olvasandó fájlok szűrésére.

Használhatja a helyettesítő karaktereket a OPENROWSET lekérdezésben, és szűrheti a záradékban lévő WHERE fájlokat. Az eredmények megegyeznek az előző példával.

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és