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


Mappák és több fájl lekérdezése

Ebből a cikkből megtudhatja, hogyan írhat lekérdezést kiszolgáló nélküli SQL-készlet használatával az Azure Synapse Analyticsben.

A kiszolgáló nélküli SQL-készlet támogatja több fájl/mappa olvasását helyettesítő karakterek használatával, amelyek hasonlóak a Windows operációs rendszerben használt helyettesítő karakterekhez. Ugyanakkor nagyobb rugalmasság érhető el, mivel több helyettesítő karakter is engedélyezett.

Előfeltételek

Első lépésként hozzon létre egy adatbázist , amelyben végrehajtja a lekérdezéseket. Ezután inicializálja az objektumokat úgy, hogy telepítőszkriptet futtat az adatbázison. 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.

A csv/taxi mappát fogja használni a mintalekérdezések követéséhez. A 2016 júliusa és 2018 júniusa közötti NYC Taxi – Yellow Taxi Trip Records adatokat tartalmazza. A csv/taxiban lévő fájlok neve év és hónap után a következő mintával történik: yellow_tripdata_<year-month<>>.csv

A mappában lévő összes fájl olvasása

Az alábbi példa beolvassa az összes NYC Yellow Taxi adatfájlt a csv/taxi mappából, és visszaadja az utasok és az utazások teljes számát évente. Emellett az összesítő függvények használatát is megjeleníti.

SELECT 
    YEAR(pickup_datetime) as [year],
    SUM(passenger_count) AS passengers_total,
    COUNT(*) AS [rides_total]
FROM OPENROWSET(
        BULK 'csv/taxi/*.csv',
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT = 'CSV', PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        pickup_datetime DATETIME2 2, 
        passenger_count INT 4
    ) AS nyc
GROUP BY
    YEAR(pickup_datetime)
ORDER BY
    YEAR(pickup_datetime);

Megjegyzés

Az egyetlen OPENROWSET-vel elért összes fájlnak azonos struktúrával kell rendelkeznie (azaz az oszlopok számának és adattípusainak).

Fájlok olvasási részhalmaza a mappában

Az alábbi példa beolvassa a csv/taxi mappából a 2017-es NYC Yellow Taxi adatfájlokat helyettesítő karakterrel, és a teljes viteldíj összegét adja vissza a fizetési típusonként.

SELECT 
    payment_type,  
    SUM(fare_amount) AS fare_total
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT = 'CSV', PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        payment_type INT 10,
        fare_amount FLOAT 11
    ) AS nyc
GROUP BY payment_type
ORDER BY payment_type;

Megjegyzés

Az egyetlen OPENROWSET-vel elért összes fájlnak azonos struktúrával kell rendelkeznie (azaz az oszlopok számának és adattípusainak).

A mappában lévő fájlok részhalmazának olvasása több fájlútvonallal

Az alábbi példa a csv/taxi mappából olvassa be a 2017-es NYC Yellow Taxi adatfájlokat 2 fájlútvonallal, elsőként a januári adatokat tartalmazó fájl teljes elérési útjával, a második pedig a novemberi és decemberi helyettesítő karakteres olvasási hónapokkal, amely a teljes viteldíj összegét adja vissza fizetési típusonként.

SELECT 
    payment_type,  
    SUM(fare_amount) AS fare_total
FROM OPENROWSET(
        BULK (
            'csv/taxi/yellow_tripdata_2017-01.csv',
            'csv/taxi/yellow_tripdata_2017-1*.csv'
        ),
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT = 'CSV', PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        payment_type INT 10,
        fare_amount FLOAT 11
    ) AS nyc
GROUP BY payment_type
ORDER BY payment_type;

Megjegyzés

Az egyetlen OPENROWSET-vel elért összes fájlnak azonos struktúrával kell rendelkeznie (azaz az oszlopok számának és adattípusainak).

Mappák olvasása

Az OPENROWSET-hez megadott elérési út egy mappa elérési útja is lehet. A következő szakaszok ezeket a lekérdezéstípusokat tartalmazzák.

Az összes fájl olvasása adott mappából

A mappában lévő összes fájlt a fájlszintű helyettesítő karakterrel olvashatja el, ahogy az Az összes fájl beolvasása mappában című témakörben látható. De lekérdezhet egy mappát, és felhasználhatja az abban a mappában lévő összes fájlt.

Ha az OPENROWSET-ben megadott elérési út egy mappára mutat, a rendszer az adott mappában lévő összes fájlt használja a lekérdezés forrásaként. A következő lekérdezés beolvassa a csv/taxi mappában lévő összes fájlt.

Megjegyzés

Jegyezze fel az alábbi lekérdezésben az elérési út végén található / értékét. Egy mappát jelöl. Ha a /értéke nincs megadva, a lekérdezés ehelyett egy taxi nevű fájlt céloz meg.

SELECT
    YEAR(pickup_datetime) as [year],
    SUM(passenger_count) AS passengers_total,
    COUNT(*) AS [rides_total]
FROM OPENROWSET(
        BULK 'csv/taxi/',
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT = 'CSV', PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2, 
        pickup_datetime DATETIME2, 
        dropoff_datetime DATETIME2,
        passenger_count INT,
        trip_distance FLOAT,
        rate_code INT,
        store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
        pickup_location_id INT,
        dropoff_location_id INT,
        payment_type INT,
        fare_amount FLOAT,
        extra FLOAT,
        mta_tax FLOAT,
        tip_amount FLOAT,
        tolls_amount FLOAT,
        improvement_surcharge FLOAT,
        total_amount FLOAT
    ) AS nyc
GROUP BY
    YEAR(pickup_datetime)
ORDER BY
    YEAR(pickup_datetime);

Megjegyzés

Az egyetlen OPENROWSET-vel elért összes fájlnak azonos struktúrával kell rendelkeznie (azaz az oszlopok számának és adattípusainak).

Az összes fájl olvasása több mappából

Helyettesítő karakterrel több mappából is olvashat fájlokat. A következő lekérdezés beolvassa a csv mappában található összes olyan fájlt, amelynek neve t-vel kezdődik és i végződésű.

Megjegyzés

Jegyezze fel az alábbi lekérdezésben az elérési út végén található / értékét. Egy mappát jelöl. Ha a / hiányzik, a lekérdezés a t*i nevű fájlokat célozza meg.

SELECT
    YEAR(pickup_datetime) as [year],
    SUM(passenger_count) AS passengers_total,
    COUNT(*) AS [rides_total]
FROM OPENROWSET(
        BULK 'csv/t*i/', 
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT = 'CSV', PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2, 
        pickup_datetime DATETIME2, 
        dropoff_datetime DATETIME2,
        passenger_count INT,
        trip_distance FLOAT,
        rate_code INT,
        store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
        pickup_location_id INT,
        dropoff_location_id INT,
        payment_type INT,
        fare_amount FLOAT,
        extra FLOAT,
        mta_tax FLOAT,
        tip_amount FLOAT,
        tolls_amount FLOAT,
        improvement_surcharge FLOAT,
        total_amount FLOAT
    ) AS nyc
GROUP BY
    YEAR(pickup_datetime)
ORDER BY
    YEAR(pickup_datetime);

Megjegyzés

Az egyetlen OPENROWSET-vel elért összes fájlnak azonos struktúrával kell rendelkeznie (azaz az oszlopok számának és adattípusainak).

Mivel csak egy olyan mappája van, amely megfelel a feltételeknek, a lekérdezés eredménye megegyezik a Mappában lévő összes fájl olvasása lehetőségével.

Rekurzív mappák átjárása

A kiszolgáló nélküli SQL-készlet rekurzív módon átjárhatja a mappákat, ha az elérési út végén a /** értéket adja meg. A következő lekérdezés a csv/taxi mappában található összes mappából és almappából beolvassa az összes fájlt.

SELECT
    YEAR(pickup_datetime) as [year],
    SUM(passenger_count) AS passengers_total,
    COUNT(*) AS [rides_total]
FROM OPENROWSET(
        BULK 'csv/taxi/**', 
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT = 'CSV', PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2, 
        pickup_datetime DATETIME2, 
        dropoff_datetime DATETIME2,
        passenger_count INT,
        trip_distance FLOAT,
        rate_code INT,
        store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
        pickup_location_id INT,
        dropoff_location_id INT,
        payment_type INT,
        fare_amount FLOAT,
        extra FLOAT,
        mta_tax FLOAT,
        tip_amount FLOAT,
        tolls_amount FLOAT,
        improvement_surcharge FLOAT,
        total_amount FLOAT
    ) AS nyc
GROUP BY
    YEAR(pickup_datetime)
ORDER BY
    YEAR(pickup_datetime);

Megjegyzés

Az egyetlen OPENROWSET-vel elért összes fájlnak azonos struktúrával kell rendelkeznie (azaz az oszlopok számának és adattípusainak).

Több helyettesítő karakter

Több helyettesítő karaktert is használhat különböző elérési utak szintjén. Bővítheti például a korábbi lekérdezést, hogy csak a 2017-ben tárolt adatokkal olvassa be a fájlokat az összes olyan mappából, amelynek a neve t-vel kezdődik, és i-vel végződik.

Megjegyzés

Jegyezze fel az alábbi lekérdezésben az elérési út végén található / értékét. Egy mappát jelöl. Ha a / hiányzik, a lekérdezés a t*i nevű fájlokat célozza meg. Lekérdezésenként legfeljebb 10 helyettesítő karakter lehet.

SELECT
    YEAR(pickup_datetime) as [year],
    SUM(passenger_count) AS passengers_total,
    COUNT(*) AS [rides_total]
FROM OPENROWSET(
        BULK 'csv/t*i/yellow_tripdata_2017-*.csv',
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT = 'CSV', PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2, 
        pickup_datetime DATETIME2, 
        dropoff_datetime DATETIME2,
        passenger_count INT,
        trip_distance FLOAT,
        rate_code INT,
        store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
        pickup_location_id INT,
        dropoff_location_id INT,
        payment_type INT,
        fare_amount FLOAT,
        extra FLOAT,
        mta_tax FLOAT,
        tip_amount FLOAT,
        tolls_amount FLOAT,
        improvement_surcharge FLOAT,
        total_amount FLOAT
    ) AS nyc
GROUP BY
    YEAR(pickup_datetime)
ORDER BY
    YEAR(pickup_datetime);

Megjegyzés

Az egyetlen OPENROWSET-vel elért összes fájlnak azonos struktúrával kell rendelkeznie (azaz az oszlopok számának és adattípusainak).

Mivel csak egy olyan mappája van, amely megfelel a feltételeknek, a lekérdezés eredménye megegyezik a mappában lévő fájlok olvasási részhalmazával , és az Összes fájl olvasása adott mappából. Az összetettebb helyettesítő karakterhasználati forgatókönyveket a Lekérdezési parquet-fájlok ismertetik.

Következő lépések

További információt a Lekérdezésspecifikus fájlok című cikkben talál.