Külső táblák használata a Synapse SQL-lel
Egy külső tábla a Hadoopban, az Azure Storage-blobban vagy az Azure Data Lake Storage-ban található adatokra mutat. Külső táblák használatával adatokat olvashat fájlokból, vagy adatokat írhat az Azure Storage-fájlokba.
A Synapse SQL-ben külső táblák használatával olvashatja a külső adatokat dedikált SQL-készlet vagy kiszolgáló nélküli SQL-készlet használatával.
A külső adatforrás típusától függően kétféle külső táblát használhat:
- Hadoop külső táblák , amelyekkel adatokat olvashat és exportálhat különböző adatformátumokban, például CSV, Parquet és ORC formátumban. A Hadoop külső táblák dedikált SQL-készletekben érhetők el, de kiszolgáló nélküli SQL-készletekben nem érhetők el.
- Natív külső táblák , amelyekkel adatokat olvashat és exportálhat különböző adatformátumokban, például CSV-ben és Parquetben. A natív külső táblák kiszolgáló nélküli SQL-készletekben érhetők el, és nyilvános előzetes verzióban érhetők el a dedikált SQL-készletekben. Adatok írása/exportálása a CETAS és a natív külső táblák használatával csak a kiszolgáló nélküli SQL-készletben érhető el, a dedikált SQL-készletekben azonban nem.
A Hadoop és a natív külső táblák közötti főbb különbségek:
Külső tábla típusa | Hadoop | Natív |
---|---|---|
Dedikált SQL-készlet | Elérhető | Nyilvános előzetes verzióban csak parquet-táblák érhetők el. |
Kiszolgáló nélküli SQL-készlet | Nem elérhető | Elérhető |
Támogatott formátumok | Tagolt/CSV, Parquet, ORC, Hive RC és RC | Kiszolgáló nélküli SQL-készlet: Tagolt/CSV, Parquet és Delta Lake Dedikált SQL-készlet: Parquet (előzetes verzió) |
Mappapartíció eltávolítása | Nem | A particionálás megszüntetése csak az Apache Spark-készletekből szinkronizált Parquet- vagy CSV-formátumokon létrehozott particionált táblákban érhető el. Előfordulhat, hogy külső táblákat hoz létre a Parquet particionált mappáiban, de a particionálási oszlopok elérhetetlenek és figyelmen kívül hagyhatók, míg a partícióeltörlés nem lesz alkalmazva. Ne hozzon létre külső táblákat a Delta Lake-mappákban , mert azok nem támogatottak. Ha particionált Delta Lake-adatokat szeretne lekérdezni, használja a Delta particionált nézeteit . |
Fájlelivétel (predikátum leküldése) | Nem | Igen a kiszolgáló nélküli SQL-készletben. A sztringleküldéshez a leküldés engedélyezéséhez az oszlopokon VARCHAR lévő rendezést kell használniaLatin1_General_100_BIN2_UTF8 . A rendezésekkel kapcsolatos további információkért tekintse meg a Synapse SQL által támogatott rendezési típusokat. |
Hely egyéni formátuma | Nem | Igen, helyettesítő karakterek használata, például /year=*/month=*/day=* Parquet- vagy CSV-formátumokhoz. Az egyéni mappa elérési útjai nem érhetők el a Delta Lake-ben. A kiszolgáló nélküli SQL-készletben rekurzív helyettesítő karakterek /logs/** használatával is hivatkozhat parquet- vagy CSV-fájlokra a hivatkozott mappa alatti almappákban. |
Rekurzív mappavizsgálat | Igen | Igen. A kiszolgáló nélküli SQL-készletekben a hely elérési útjának végén kell megadni /** . A dedikált készletben a mappák mindig rekurzívan vannak beolvasva. |
Tárhitelesítés | Storage Access Key(SAK), Microsoft Entra átengedése, felügyelt identitás, egyéni alkalmazás Microsoft Entra-identitása | Közös hozzáférésű jogosultságkód (SAS), Microsoft Entra átengedés, felügyelt identitás, egyéni alkalmazás Microsoft Entra-identitása. |
Oszlopleképezés | Ordinal – A külső tábladefiníció oszlopai pozíció szerint vannak leképezve az alapul szolgáló Parquet-fájlok oszlopaihoz. | Kiszolgáló nélküli készlet: név szerint. A külső tábladefiníció oszlopai oszlopnévegyeztetés alapján vannak megfeleltetve az alapul szolgáló Parquet-fájlok oszlopaihoz. Dedikált készlet: sorszámegyezés. A külső tábladefiníció oszlopai pozíció szerint vannak leképezve az alapul szolgáló Parquet-fájlok oszlopaihoz. |
CETAS (exportálás/átalakítás) | Igen | A célként megadott natív táblákkal rendelkező CETAS csak a kiszolgáló nélküli SQL-készletben működik. A dedikált SQL-készletek nem használhatók az adatok natív táblákkal való exportálására. |
Megjegyzés:
A natív külső táblák az általánosan elérhető készletek ajánlott megoldásai. Ha külső adatokhoz kell hozzáférnie, mindig használja a kiszolgáló nélküli készletek natív tábláinak használatát. A dedikált készletekben váltson a parquet-fájlok olvasására szolgáló natív táblákra, ha azok a GA-ban vannak. A Hadoop-táblákat csak akkor használja, ha natív külső táblákban (például - ORC, RC) nem támogatott típusokat kell elérnie, vagy ha a natív verzió nem érhető el.
Külső táblák dedikált SQL-készletben és kiszolgáló nélküli SQL-készletben
Külső táblákat a következőre használhat:
- Az Azure Blob Storage és az Azure Data Lake Gen2 lekérdezése Transact-SQL utasításokkal.
- A lekérdezési eredmények tárolása fájlokban az Azure Blob Storage-ban vagy az Azure Data Lake Storage-ban a CETAS használatával.
- Importálja az adatokat az Azure Blob Storage-ból és az Azure Data Lake Storage-ból, és tárolja egy dedikált SQL-készletben (csak Hadoop-táblák dedikált készletben).
Megjegyzés:
Ha a CREATE TABLE AS Standard kiadás LECT utasítással együtt használják, a külső tábla kiválasztása adatokat importál egy táblába a dedikált SQL-készletben.
Ha a hadoop külső táblák teljesítménye a dedikált készletekben nem felel meg a teljesítménycéloknak, érdemes lehet külső adatokat betölteni a Datawarehouse-táblákba a COPY utasítással.
A betöltési oktatóanyagot a PolyBase használatával az Azure Blob Storage-ból töltheti be.
A Synapse SQL-készletekben a következő lépésekkel hozhat létre külső táblákat:
- KÜLSŐ ADATFORRÁS LÉTREHOZÁSA külső Azure-tárolóra való hivatkozáshoz, és adja meg a tár eléréséhez használandó hitelesítő adatokat.
- CREATE EXTERNAL FILE FORMAT to describe format of CSV or Parquet files.
- CREATE EXTERNAL TABLE on the files on the data source with the same file format.
Mappapartíció eltávolítása
A Synapse-készletek natív külső táblái figyelmen kívül hagyhatják a lekérdezésekhez nem releváns mappákban elhelyezett fájlokat. Ha a fájlok mappahierarchiában vannak tárolva (például - /year=2020/month=03/day=16
) és a year
, és month
day
oszlopokként vannak közzétéve, a szűrőket year=2020
tartalmazó lekérdezések csak a mappában elhelyezett almappákból olvassák be a year=2020
fájlokat. A lekérdezés figyelmen kívül hagyja a más mappákban (year=2021
vagy ) elhelyezett fájlokat és year=2022
mappákat. Ezt az eliminációt partícióeliminálásnak nevezzük.
A mappapartíció eltávolítása a Synapse Spark-készletekből szinkronizált natív külső táblákban érhető el. Ha particionált adatkészlettel rendelkezik, és a partíció eltávolítását a létrehozott külső táblákkal szeretné kihasználni, használja a particionált nézeteket a külső táblák helyett.
Fájlelitörlés
Egyes adatformátumok, például a Parquet és a Delta fájlstatisztikákat tartalmaznak az egyes oszlopokhoz (például az egyes oszlopok minimális/maximális értékeihez). Az adatokat szűrő lekérdezések nem olvassák be azokat a fájlokat, amelyekben a szükséges oszlopértékek nem léteznek. A lekérdezés először megvizsgálja a lekérdezési predikátumban használt oszlopok minimális/maximális értékeit, hogy megtalálja azokat a fájlokat, amelyek nem tartalmazzák a szükséges adatokat. Ezek a fájlok figyelmen kívül lesznek hagyva, és törlődnek a lekérdezési tervből.
Ezt a technikát szűrő predikátum leküldéses leküldésnek is nevezik, és javíthatja a lekérdezések teljesítményét. A szűrőleküldés a Parquet- és Delta-formátumok kiszolgáló nélküli SQL-készleteiben érhető el. A sztringtípusok szűrőleküldésének használatához használja a VARCHAR típust a Latin1_General_100_BIN2_UTF8
rendezéssel. A rendezésekkel kapcsolatos további információkért tekintse meg a Synapse SQL által támogatott rendezési típusokat.
Biztonság
A felhasználónak engedéllyel kell rendelkeznie SELECT
egy külső táblában az adatok olvasásához.
A külső táblák az adatforrásban definiált adatbázis-hatókörű hitelesítő adatokkal férnek hozzá a mögöttes Azure Storage-hez az alábbi szabályok használatával:
- A hitelesítő adatok nélküli adatforrás lehetővé teszi a külső táblák számára, hogy hozzáférjenek az Azure Storage nyilvánosan elérhető fájljaihoz.
- Az adatforrás rendelkezhet olyan hitelesítő adatokkal, amelyek lehetővé teszik, hogy a külső táblák csak az Azure Storage-ban lévő fájlokat érhessék el SAS-jogkivonat vagy munkaterület felügyelt identitás használatával – Ilyen például a Tárfájlok tárterület-hozzáférés-vezérlésének fejlesztése című cikk.
Példa a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA) parancsra
Az alábbi példa létrehoz egy Hadoop külső adatforrást az Azure Data Lake Gen2 dedikált SQL-készletében, amely a New York-i adatkészletre mutat:
CREATE DATABASE SCOPED CREDENTIAL [ADLS_credential]
WITH IDENTITY='SHARED ACCESS SIGNATURE',
SECRET = 'sv=2018-03-28&ss=bf&srt=sco&sp=rl&st=2019-10-14T12%3A10%3A25Z&se=2061-12-31T12%3A10%3A00Z&sig=KlSU2ullCscyTS0An0nozEpo4tO5JAgGBvw%2FJX2lguw%3D'
GO
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
-- Please note the abfss endpoint when your account has secure transfer enabled
( LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net' ,
CREDENTIAL = ADLS_credential ,
TYPE = HADOOP
) ;
Az alábbi példa egy külső adatforrást hoz létre az Azure Data Lake Gen2 számára, amely a nyilvánosan elérhető New York-i adatkészletre mutat:
CREATE EXTERNAL DATA SOURCE YellowTaxi
WITH ( LOCATION = 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/',
TYPE = HADOOP)
Példa a CREATE EXTERNAL FILE FORMAT (KÜLSŐ FÁJLFORMÁTUM LÉTREHOZÁSA) parancsra
Az alábbi példa egy külső fájlformátumot hoz létre a census fájlokhoz:
CREATE EXTERNAL FILE FORMAT census_file_format
WITH
(
FORMAT_TYPE = PARQUET,
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
)
Példa CREATE EXTERNAL TABLE (KÜLSŐ TÁBLA LÉTREHOZÁSA)
Az alábbi példa egy külső táblát hoz létre. Az első sort adja vissza:
CREATE EXTERNAL TABLE census_external_table
(
decennialTime varchar(20),
stateName varchar(100),
countyName varchar(100),
population int,
race varchar(50),
sex varchar(10),
minAge int,
maxAge int
)
WITH (
LOCATION = '/parquet/',
DATA_SOURCE = population_ds,
FILE_FORMAT = census_file_format
)
GO
SELECT TOP 1 * FROM census_external_table
Külső táblák létrehozása és lekérdezése fájlból az Azure Data Lake-ben
A Synapse Studio Data Lake-felderítési képességeinek használatával mostantól létrehozhat és lekérdezhet egy külső táblát a Synapse SQL-készlettel, és egyszerűen kattintson a fájlra a jobb gombbal. Az ADLS Gen2-tárfiókból külső táblák létrehozásához használt egykattintásos kézmozdulat csak Parquet-fájlok esetében támogatott.
Előfeltételek
Hozzáféréssel kell rendelkeznie a munkaterülethez legalább az
Storage Blob Data Contributor
ADLS Gen2-fiókhoz vagy a hozzáférés-vezérlési listákhoz (ACL) való hozzáférési szerepkörrel, amelyek lehetővé teszik a fájlok lekérdezését.Legalább engedéllyel kell rendelkeznie egy külső tábla létrehozásához és külső táblák lekérdezéséhez a Synapse SQL-készletben (dedikált vagy kiszolgáló nélküli).
Az Adatok panelen válassza ki azt a fájlt, amelyből létre szeretné hozni a külső táblát:
Ekkor megnyílik egy párbeszédpanel. Válassza ki a dedikált SQL-készletet vagy a kiszolgáló nélküli SQL-készletet, adjon nevet a táblának, és válassza a megnyitott szkriptet:
Az SQL-szkript automatikusan kinyeri a sémát a fájlból:
Run the script. A szkript automatikusan futtat egy Select Top 100 *.:
A külső tábla létrejött, a külső tábla tartalmának későbbi feltárásához a felhasználó közvetlenül az Adatok panelről kérdezheti le:
Következő lépések
A lekérdezési eredmények Azure Storage-beli külső táblába való mentéséről a CETAS-cikkben olvashat. Vagy elkezdheti az Apache Spark lekérdezését az Azure Synapse külső tábláihoz.