Tárolófájlok lekérdezése kiszolgáló nélküli SQL-készlettel az Azure Synapse Analyticsben
A kiszolgáló nélküli SQL-készlettel adatokat kérdezhet le a data lake-ben. Egy T-SQL-lekérdezési felületet kínál, amely félig strukturált és strukturálatlan adat lekérdezéseket fogad. A lekérdezéshez a következő T-SQL-szempontok támogatottak:
- Teljes SELECT felület, beleértve az SQL-függvények és operátorok többségét.
- A CREATE EXTERNAL TABLE AS SELECT (CETAS) létrehoz egy külső táblát , majd exportálja párhuzamosan a Transact-SQL SELECT utasítás eredményeit az Azure Storage-ba.
A jelenleg nem támogatott szolgáltatással kapcsolatos további információkért olvassa el a kiszolgáló nélküli SQL-készlet áttekintési cikkét vagy az alábbi cikkeket:
- Tárterület-hozzáférés fejlesztése, ahol megtudhatja, hogyan használhatja a Külső tábla és az OPENROWSET függvényt a tárolóból származó adatok beolvasására.
- Szabályozhatja a tárterület-hozzáférést , ahol megtudhatja, hogyan engedélyezheti a Synapse SQL-t a tárolóhoz SAS-hitelesítéssel vagy a munkaterület felügyelt identitásával való hozzáféréshez.
Áttekintés
Az Azure Storage-fájlokban található adatok lekérdezésének zökkenőmentessége érdekében a kiszolgáló nélküli SQL-készlet az OPENROWSET függvényt használja további funkciókkal:
- Több fájl vagy mappa lekérdezése
- PARQUET fájlformátum
- CSV és tagolt szöveg lekérdezése (mező terminátor, sor terminátor, escape char)
- DELTA LAKE formátum
- Az oszlopok kiválasztott részhalmazának olvasása
- Sémakövetkeztetés
- filename függvény
- filepath függvény
- Összetett típusok és beágyazott vagy ismétlődő adatstruktúrák használata
PARQUET-fájlok lekérdezése
Parquet-forrásadatok lekérdezéséhez használja a FORMAT = 'PARQUET' parancsot:
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Használati példákért tekintse át a Query Parquet files cikket.
CSV-fájlok lekérdezése
A CSV-forrásadatok lekérdezéséhez használja a FORMAT = "CSV" parancsot. A CSV-fájlok lekérdezésekor a függvény részeként megadhatja a CSV-fájl sémáját OPENROWSET
:
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.csv', FORMAT = 'CSV', PARSER_VERSION='2.0')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
További lehetőségek is használhatók az elemzési szabályok egyéni CSv-formátumra való módosítására:
- ESCAPE_CHAR = "char" A fájlban azt a karaktert adja meg, amely önmagát és a fájl összes elválasztó értékét megszabja. Ha a feloldó karaktert nem önmagától, vagy az elválasztó értékek bármelyikétől eltérő érték követi, a rendszer elveti a feloldó karaktert az érték olvasásakor. A ESCAPE_CHAR paraméter akkor lesz alkalmazva, ha a FIELDQUOTE engedélyezve van vagy nincs. Az idézőjelet nem fogja használni. Az idézőjelet egy másik idéző karakterrel kell megszűkíteni. Az idézőjel csak akkor jelenhet meg az oszlopértékben, ha az érték idéző karakterekkel van beágyazva.
- FIELDTERMINATOR ='field_terminator' A használni kívánt mezőkifejezést adja meg. Az alapértelmezett mezőkifejezés egy vessző (",")
- ROWTERMINATOR ='row_terminator' A használni kívánt sor terminátorát adja meg. Az alapértelmezett sorkifejezés egy új karakter: \r\n.
DELTA LAKE-formátum lekérdezése
A Delta Lake-forrásadatok lekérdezéséhez használja a FORMAT = "DELTA" formátumot, és hivatkozzon a Delta Lake-fájlokat tartalmazó gyökérmappára.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder', FORMAT = 'DELTA')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
A gyökérmappának tartalmaznia kell egy ._delta_log
Használati példákért tekintse át a Delta Lake formátumú lekérdezést ismertető cikket.
Fájlséma
A Synapse SQL SQL SQL-beli SQL-nyelv lehetővé teszi a fájl sémájának definiálását a függvény részeként OPENROWSET
, és beolvassa az oszlopok teljes vagy részhalmazát, vagy sémakövetkeztetés használatával automatikusan megkísérli meghatározni a fájl oszloptípusait.
Az oszlopok kiválasztott részhalmazának olvasása
Az elolvasni kívánt oszlopok megadásához megadhat egy opcionális WITH záradékot az utasításban OPENROWSET
.
- Ha vannak CSV-adatfájlok, az összes oszlop beolvasásához adja meg az oszlopneveket és azok adattípusait. Ha az oszlopok egy részhalmazát szeretné használni, az ordinális számokkal az eredeti adatfájlokból származó oszlopokat sorszám szerint választhatja ki. Az oszlopokat a sorszám megjelölése köti össze.
- Ha vannak Parquet-adatfájlok, adja meg azokat az oszlopneveket, amelyek megfelelnek az eredeti adatfájlok oszlopneveinek. Az oszlopok név szerint lesznek kötve.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
WITH (
C1 int,
C2 varchar(20),
C3 varchar(max)
) as rows
Minden oszlophoz meg kell adnia az oszlop nevét és a beírási záradékot WITH
.
Minták esetén az összes oszlop megadása nélkül olvassa el a CSV-fájlokat.
Sémakövetkeztetés
Ha kihagyja a WITH záradékot az OPENROWSET
utasításból, utasíthatja a szolgáltatást, hogy automatikusan észlelje (következtetve) a sémát az alapul szolgáló fájlokból.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
Győződjön meg arról, hogy a megfelelő következtetési adattípusokat használja az optimális teljesítmény érdekében.
Több fájl vagy mappa lekérdezése
Ha T-SQL-lekérdezést szeretne futtatni egy mappán vagy mappakészleten belüli fájlokon, miközben egyetlen entitásként vagy sorkészletként kezeli őket, adjon meg egy mappát vagy mintát (helyettesítő karakterek használatával) fájlok vagy mappák halmazán keresztül.
Az alábbi szabályokat kell betartani:
- A minták megjelenhetnek egy könyvtár elérési útjának egy részében vagy egy fájlnévben.
- Több minta is megjelenhet ugyanabban a könyvtárlépésben vagy fájlnévben.
- Ha több helyettesítő karakter is létezik, akkor az összes egyező elérési úton lévő fájlok szerepelni fognak az eredményül kapott fájlkészletben.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/myroot/*/mysubfolder/*.parquet', FORMAT = 'PARQUET' ) as rows
Használati példákért tekintse meg a Lekérdezés mappákat és több fájlt .
Fájl metaadat-függvényei
Fájlnév függvény
Ez a függvény azt a fájlnevet adja vissza, amelyből a sor származik.
Adott fájlok lekérdezéséhez olvassa el az Adott fájlok lekérdezése című cikkben található Fájlnév szakaszt .
A visszaadott adattípus nvarchar(1024). Az optimális teljesítmény érdekében a fájlnév függvény eredményét mindig a megfelelő adattípusra kell leadni. Ha karakteres adattípust használ, győződjön meg arról, hogy a megfelelő hosszt használja.
Filepath függvény
Ez a függvény egy teljes elérési utat vagy az elérési út egy részét adja vissza:
- Paraméter nélkül meghívva a sor teljes elérési útját adja vissza.
- Paraméterrel meghívva az elérési út azon részét adja vissza, amely megfelel a paraméterben megadott helyettesítő karakternek. Az 1. paraméter értéke például az első helyettesítő karakternek megfelelő elérési út egy részét adja vissza.
További információkért olvassa el az Adott fájlok lekérdezése című cikk Filepath szakaszát.
A visszaadott adattípus nvarchar(1024). Az optimális teljesítmény érdekében mindig a filepath függvény eredményét adja a megfelelő adattípusnak. Ha karakteres adattípust használ, győződjön meg arról, hogy a megfelelő hosszt használja.
Összetett típusok és beágyazott vagy ismétlődő adatstruktúrák használata
A beágyazott vagy ismétlődő adattípusokban(például Parquet-fájlokban) tárolt adatok zökkenőmentes használata érdekében a kiszolgáló nélküli SQL-készlet hozzáadta az alábbi bővítményeket.
Beágyazott vagy ismétlődő adatok kivetítve
Az adatok kivetítéséhez futtasson egy SELECT utasítást a Parquet-fájlon keresztül, amely beágyazott adattípusok oszlopait tartalmazza. Kimeneten a beágyazott értékek szerializálva lesznek JSON-ban, és varchar(8000) SQL-adattípusként lesznek visszaadva.
SELECT * FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
Részletesebb információkért tekintse meg a Beágyazott Lekérdezés parquet típusok című cikk Projekt beágyazott vagy ismétlődő adatszakaszát.
Elemek elérése beágyazott oszlopokból
Ha beágyazott oszlopból (például Struct) szeretne beágyazott elemeket elérni, használja a "pontjelezést" a mezőnevek az elérési útba való összefűzéséhez. Adja meg az elérési utat column_name a OPENROWSET
függvény WITH záradékában.
A szintaxistöredék példája a következő:
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
WITH ({'column_name' 'column_type',})
[AS alias]
'column_name' ::= '[field_name.] field_name'
Alapértelmezés szerint a OPENROWSET
függvény megegyezik a forrásmező nevével és elérési útjával a WITH záradékban megadott oszlopnevekkel. Az ugyanazon forrásparquet-fájlban található különböző beágyazási szinteken található elemek a WITH záradékon keresztül érhetők el.
Értékek visszaadva
- A függvény egy skaláris értéket (például int, decimális és varchar) ad vissza a megadott elemből, valamint a megadott elérési útról az összes olyan parquet-típushoz, amely nem szerepel a Beágyazott típus csoportban.
- Ha az elérési út egy beágyazott típusú elemre mutat, a függvény egy JSON-töredéket ad vissza a megadott elérési út felső elemétől kezdve. A JSON-töredék varchar(8000) típusú.
- Ha a tulajdonság nem található a megadott column_name, a függvény hibát ad vissza.
- Ha a tulajdonság nem található a megadott column_path, az Elérési út módtól függően a függvény hibát ad vissza, ha szigorú módban vagy null értékre vált, ha hashajtó módban van.
Lekérdezésminták esetén tekintse át a beágyazott oszlopok szakaszának Access-elemeit a Lekérdezés parquet beágyazott típusok című cikkben.
Ismétlődő oszlopok elemeinek elérése
Ha ismétlődő oszlop elemeit, például tömb vagy térkép elemét szeretné elérni, használja a JSON_VALUE függvényt minden olyan skaláris elemhez, amelyet ki kell vetítenie és meg kell adnia:
- Beágyazott vagy ismétlődő oszlop első paraméterként
- Egy JSON-elérési út , amely meghatározza a elérendő elemet vagy tulajdonságot második paraméterként
Ha nem skaláris elemeket szeretne elérni egy ismétlődő oszlopból, használja a JSON_QUERY függvényt minden olyan nem skaláris elemhez, amelyet be kell vetítenie és meg kell adnia:
- Beágyazott vagy ismétlődő oszlop első paraméterként
- Egy JSON-elérési út , amely meghatározza a elérendő elemet vagy tulajdonságot második paraméterként
Lásd az alábbi szintaxisrészletet:
SELECT
{ JSON_VALUE (column_name, path_to_sub_element), }
{ JSON_QUERY (column_name [ , path_to_sub_element ]), )
FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
A lekérdezési parquet beágyazott típusok cikkének ismétlődő oszlopaiból származó elemek elérésére szolgáló lekérdezésmintákat talál.
Következő lépések
A különböző fájltípusok lekérdezésével, valamint a nézetek létrehozásával és használatával kapcsolatos további információkért tekintse meg az alábbi cikkeket: