Natív külső táblák létrehozása és használata SQL-készletek használatával az Azure Synapse Analyticsben
Ebben a szakaszban megtanulhatja, hogyan hozhat létre és használhat natív külső táblákat a Synapse SQL-készletekben. A natív külső táblák jobb teljesítményt biztosítanak, ha összehasonlítják a külső táblákat a külső adatforrás definíciójával TYPE=HADOOP
. Ennek az az oka, hogy a natív külső táblák natív kódot használnak a külső adatok eléréséhez.
A külső táblák akkor hasznosak, ha a Synapse SQL-készletben szeretné szabályozni a külső adatokhoz való hozzáférést. A külső táblák akkor is hasznosak, ha olyan eszközöket szeretne használni, mint a Power BI, a Synapse SQL-készlettel együtt. A külső táblák kétféle tárolóhoz férhetnek hozzá:
- Nyilvános tárterület, ahol a felhasználók hozzáférnek a nyilvános tárfájlokhoz.
- Védett tárterület, ahol a felhasználók SAS-hitelesítő adatok, Microsoft Entra-identitás vagy Synapse-munkaterület felügyelt identitása használatával férnek hozzá a tárolófájlokhoz.
Megjegyzés:
Dedikált SQL-készletekben csak natív külső táblák használhatók Parquet-fájltípussal, és ez a funkció nyilvános előzetes verzióban érhető el. Ha általánosan elérhető Parquet-olvasó funkciót szeretne használni dedikált SQL-készletekben, vagy CSV- vagy ORC-fájlokat szeretne elérni, használja a Hadoop külső táblázatokat. A natív külső táblák általánosan elérhetők a kiszolgáló nélküli SQL-készletekben. További információ a natív és a Hadoop külső táblák közötti különbségekről a Külső táblák használata a Synapse SQL-ben.
Az alábbi táblázat a támogatott adatformátumokat sorolja fel:
Adatformátum (natív külső táblák) | Kiszolgáló nélküli SQL-készlet | Dedikált SQL-készlet |
---|---|---|
Parquet | Igen (GA) | Igen (nyilvános előzetes verzió) |
CSV | Igen | Nem (Másik lehetőségként használja a Hadoop külső táblázatokat) |
delta | Igen | Nem |
Spark | Igen | Nem |
Dataverse | Igen | Nem |
Azure Cosmos DB-adatformátumok (JSON, BSON stb.) | Nem (Másik lehetőségként nézetek létrehozása) | Nem |
Előfeltételek
Első lépésként hozzon létre egy adatbázist, amelyben a táblák létre lesznek hozva. Az adatbázis hatókörébe tartozó hitelesítő adatok létrehozása előtt az adatbázisnak rendelkeznie kell egy fő kulccsal a hitelesítő adatok védelméhez. Erről további információt a CREATE MASTER KEY (Transact-SQL) című témakörben talál. Ezután hozza létre a példában használt alábbi objektumokat:
DATABA Standard kiadás SCOPED CREDENTIAL
sqlondemand
, amely lehetővé teszi az SAS által védetthttps://sqlondemandstorage.blob.core.windows.net
Azure Storage-fiókhoz való hozzáférést.CREATE DATABASE SCOPED CREDENTIAL [sqlondemand] 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'
KÜLSŐ ADATFORRÁS
sqlondemanddemo
, amely SAS-kulccsal védett demó tárfiókra hivatkozik, és külső adatforrásnyctlc
, amely a nyilvánosan elérhető Azure Storage-fiókra hivatkozik a helyszínenhttps://azureopendatastorage.blob.core.windows.net/nyctlc/
.CREATE EXTERNAL DATA SOURCE SqlOnDemandDemo WITH ( LOCATION = 'https://sqlondemandstorage.blob.core.windows.net', CREDENTIAL = sqlondemand ); GO CREATE EXTERNAL DATA SOURCE nyctlc WITH ( LOCATION = 'https://azureopendatastorage.blob.core.windows.net/nyctlc/') GO CREATE EXTERNAL DATA SOURCE DeltaLakeStorage WITH ( location = 'https://sqlondemandstorage.blob.core.windows.net/delta-lake/' );
Fájlformátumok
QuotedCSVWithHeaderFormat
ParquetFormat
, amelyek a CSV és a parquet fájltípusokat írják le.CREATE EXTERNAL FILE FORMAT QuotedCsvWithHeaderFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', STRING_DELIMITER = '"', FIRST_ROW = 2 ) ); GO CREATE EXTERNAL FILE FORMAT ParquetFormat WITH ( FORMAT_TYPE = PARQUET ); GO CREATE EXTERNAL FILE FORMAT DeltaLakeFormat WITH ( FORMAT_TYPE = DELTA ); GO
A cikkben szereplő lekérdezések a mintaadatbázison lesznek végrehajtva, és ezeket az objektumokat használják.
Külső tábla egy fájlon
Létrehozhat olyan külső táblákat, amelyek egy Azure Storage-fiók adataihoz férnek hozzá, amelyek lehetővé teszik a Microsoft Entra-identitással vagy SAS-kulccsal rendelkező felhasználók hozzáférését. A külső táblákat ugyanúgy hozhatja létre, mint a hagyományos KÜLSŐ SQL Server-táblákat.
A következő lekérdezés létrehoz egy külső táblát, amely a SynapseSQL demo Azure Storage-fiókból olvassa be a population.csv fájlt, amely adatforrással sqlondemanddemo
van hivatkozva, és amelyet az adatbázis hatókörébe tartozó hitelesítő adatokkal véd sqlondemand
.
Az adatforrás és az adatbázis hatókörébe tartozó hitelesítő adatok a beállítási szkriptben jönnek létre.
Megjegyzés:
Módosítsa a lekérdezés első sorát, azaz a [mydbname] nevet, így a létrehozott adatbázist használja.
USE [mydbname];
GO
CREATE EXTERNAL TABLE populationExternalTable
(
[country_code] VARCHAR (5) COLLATE Latin1_General_BIN2,
[country_name] VARCHAR (100) COLLATE Latin1_General_BIN2,
[year] smallint,
[population] bigint
)
WITH (
LOCATION = 'csv/population/population.csv',
DATA_SOURCE = sqlondemanddemo,
FILE_FORMAT = QuotedCSVWithHeaderFormat
);
A natív CSV-táblák jelenleg csak a kiszolgáló nélküli SQL-készletekben érhetők el.
Külső tábla fájlkészleten
Létrehozhat olyan külső táblákat, amelyek adatokat olvasnak az Azure Storage-ban elhelyezett fájlokból:
CREATE EXTERNAL TABLE Taxi (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
fare_amount FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
total_amount FLOAT
) WITH (
LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = nyctlc,
FILE_FORMAT = ParquetFormat
);
Megadhatja azt a mintát, amelyet a fájloknak teljesíteniük kell ahhoz, hogy a külső tábla hivatkozzon rá. A minta csak Parquet- és CSV-táblákhoz szükséges. Ha Delta Lake-formátumot használ, csak egy gyökérmappát kell megadnia, és a külső tábla automatikusan megtalálja a mintát.
Megjegyzés:
A tábla particionált mappastruktúrában jön létre, de nem használhatja a partíciók eltávolítását. Ha jobb teljesítményt szeretne elérni azáltal, hogy kihagyja azokat a fájlokat, amelyek nem felelnek meg bizonyos feltételeknek (például adott év vagy hónap ebben az esetben), használja a külső adatok nézeteit.
Külső tábla hozzáfűzhető fájlokon
A külső tábla által hivatkozott fájlokat nem szabad módosítani a lekérdezés futtatása közben. A hosszú ideig futó lekérdezésben előfordulhat, hogy az SQL-készlet újra megkísérli az olvasást, beolvassa a fájlok részeit, vagy akár többször is felolvassa a fájlt. A fájltartalom módosítása rossz eredményt eredményezne. Ezért az SQL-készlet nem tudja végrehajtani a lekérdezést, ha azt észleli, hogy bármely fájl módosítási ideje módosul a lekérdezés végrehajtása során.
Bizonyos esetekben érdemes lehet létrehozni egy táblát a folyamatosan hozzáfűzött fájlokon. A folyamatosan hozzáfűzött fájlok lekérdezési hibáinak elkerülése érdekében megadhatja, hogy a külső tábla figyelmen kívül hagyja a TABLE_OPTIONS
beállítással esetlegesen inkonzisztens olvasásokat.
CREATE EXTERNAL TABLE populationExternalTable
(
[country_code] VARCHAR (5) COLLATE Latin1_General_BIN2,
[country_name] VARCHAR (100) COLLATE Latin1_General_BIN2,
[year] smallint,
[population] bigint
)
WITH (
LOCATION = 'csv/population/population.csv',
DATA_SOURCE = sqlondemanddemo,
FILE_FORMAT = QuotedCSVWithHeaderFormat,
TABLE_OPTIONS = N'{"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}'
);
Az ALLOW_INCONSISTENT_READS
olvasási beállítás letiltja a fájlmódosítási idő ellenőrzését a lekérdezés életciklusa során, és beolvassa a külső tábla által hivatkozott fájlokban elérhető adatokat. A hozzáfűzhető fájlokban a meglévő tartalom nem frissül, és csak új sorokat ad hozzá. Ezért a hibás eredmények valószínűsége a frissíthető fájlokhoz képest minimálisra csökken. Ez a beállítás lehetővé teheti a gyakran hozzáfűzött fájlok olvasását a hibák kezelése nélkül.
Ez a beállítás csak a CSV fájlformátumban létrehozott külső táblákban érhető el.
Megjegyzés:
Ahogy a beállítás neve is mutatja, a tábla létrehozója elfogadja annak kockázatát, hogy az eredmények nem lesznek konzisztensek. A hozzáfűzhető fájlokban helytelen eredményeket kaphat, ha a tábla öncsatlakoztatásával kényszeríti a mögöttes fájlok többszöri olvasását. A legtöbb "klasszikus" lekérdezésben a külső tábla figyelmen kívül hagy néhány sort, amelyeket a lekérdezés futtatása közben fűz hozzá.
Delta Lake külső tábla
Külső táblák hozhatók létre egy Delta Lake-mappa tetején. Az egyetlen különbség az egyetlen fájlon vagy fájlkészleten létrehozott külső táblák és a Delta Lake-formátumban létrehozott külső táblák között az, hogy a Delta Lake külső táblában egy Delta Lake-struktúrát tartalmazó mappára kell hivatkoznia.
Egy Delta Lake-mappában létrehozott tábladefinícióra példa a következő:
CREATE EXTERNAL TABLE Covid (
date_rep date,
cases int,
geo_id varchar(6)
) WITH (
LOCATION = 'covid', --> the root folder containing the Delta Lake files
data_source = DeltaLakeStorage,
FILE_FORMAT = DeltaLakeFormat
);
A külső táblák nem hozhatók létre particionált mappában. Tekintse át a Synapse kiszolgáló nélküli SQL-készlet önsegítő oldalán található egyéb ismert problémákat.
Delta-táblák particionált mappákon
A kiszolgáló nélküli SQL-készletek külső táblái nem támogatják a Particionálást Delta Lake formátumban. A Delta particionált nézeteit táblák helyett használja, ha delta Lake-adatkészleteket particionált.
Fontos
Ne hozzon létre külső táblákat particionált Delta Lake-mappákon, még akkor sem, ha azt látja, hogy bizonyos esetekben működni fognak. A nem támogatott funkciók, például a particionált deltamappák külső tábláinak használata problémákat vagy instabilitást okozhat a kiszolgáló nélküli készletben. Azure-támogatás nem tudja megoldani a problémát, ha particionált mappákban lévő táblákat használ. A rendszer megkéri, hogy váltson át a Delta particionált nézeteire , és írja át a kódot, hogy csak a támogatott funkciót használja a probléma megoldása előtt.
Külső tábla használata
A lekérdezésekben ugyanúgy használhat külső táblákat , mint az SQL Server-lekérdezésekben.
Az alábbi lekérdezés ezt az előző szakaszban létrehozott külső sokaságtáblával szemlélteti. 2019-ben csökkenő sorrendben adja vissza az ország-/régióneveket.
Megjegyzés:
Módosítsa a lekérdezés első sorát, azaz a [mydbname] nevet, így a létrehozott adatbázist használja.
USE [mydbname];
GO
SELECT
country_name, population
FROM populationExternalTable
WHERE
[year] = 2019
ORDER BY
[population] DESC;
A lekérdezés teljesítménye régiótól függően változhat. Előfordulhat, hogy a munkaterület nem ugyanabban a régióban található, mint az ezekben a mintákban használt Azure Storage-fiókok. Éles számítási feladatokhoz helyezze a Synapse-munkaterületet és az Azure Storage-t ugyanabban a régióban.
Következő lépések
Ha tudni szeretné, hogyan tárolhatja a lekérdezések eredményeit a tárterületen, tekintse meg a Storage-lekérdezés eredményeit ismertető cikket.