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


KÜLSŐ TÁBLA LÉTREHOZÁSA KIVÁLASZTÁSKÉNT (CETAS) (Transact-SQL)

A következőkre vonatkozik: Az SQL Server 2022 (16.x) és újabb verziói az Azure Synapse AnalyticsPlatform System (PDW)

Létrehoz egy külső táblát, majd exportálja párhuzamosan egy Transact-SQL SELECT utasítás eredményeit.

  • Az Azure Synapse Analytics and Analytics Platform System támogatja a Hadoopot vagy az Azure Blob Storage-t.
  • Az SQL Server 2022 (16.x) és újabb verziói támogatják a CREATE EXTERNAL TABLE AS SELECT (CETAS) egy külső tábla létrehozásához, majd egy Transact-SQL SELECT utasítás eredményének exportálásához az Azure Data Lake Storage (ADLS) Gen2, az Azure Storage-fiók V2 és az S3-kompatibilis objektumtárolóba.

Jegyzet

Az Azure SQL Managed Instance CETAS képességei és biztonsága eltér az SQL Servertől vagy az Azure Synapse Analyticstől. További információt a CREATE EXTERNAL TABLE AS SELECTAzure SQL Managed Instance verziójában talál.

Jegyzet

Az Azure Synapse Analytics kiszolgáló nélküli készleteihez tartozó CETAS képességei és biztonsága eltér az SQL Servertől. További információ: CETAS és Synapse SQL.

Transact-SQL szintaxis konvenciói

Szintaxis

CREATE EXTERNAL TABLE { [ [ database_name . [ schema_name ] . ] | schema_name . ] table_name }
    [ (column_name [ , ...n ] ) ]
    WITH (
        LOCATION = 'hdfs_folder' | '<prefix>://<path>[:<port>]' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
        [ , <reject_options> [ , ...n ] ]
    )
    AS <select_statement>
[;]

<reject_options> ::=
{
    | REJECT_TYPE = value | percentage
    | REJECT_VALUE = reject_value
    | REJECT_SAMPLE_VALUE = reject_sample_value
}

<select_statement> ::=
    [ WITH <common_table_expression> [ , ...n ] ]
    SELECT <select_criteria>

Érvek

[ database_name . [ schema_name ] . ] | schema_name . ] table_name

Az adatbázisban létrehozandó tábla egy-háromrészes neve. Külső tábla esetén a relációs adatbázis csak a tábla metaadatait tárolja.

[ ( column_name [ ,... n ] ) ]

Egy táblaoszlop neve.

HELY

A következőkre vonatkozik: Azure Synapse Analytics és Analytics platformrendszer

"hdfs_folder"**
Megadja, hogy hol írja a SELECT utasítás eredményeit a külső adatforrásra. A hely egy mappanév, és opcionálisan tartalmazhat egy elérési utat, amely a Hadoop-fürt vagy a Blob Storage gyökérmappához képest van. A PolyBase létrehozza az elérési utat és a mappát, ha még nem létezik.

A külső fájlok hdfs_folder vannak megírva, és QueryID_date_time_ID.formatnevezik el, ahol a ID növekményes azonosító, format pedig az exportált adatformátum. Ilyen például a QID776_20160130_182739_0.orc.

A LOCATION-nak egy mappára kell mutatnia, és záró /kell rendelkeznie, például: aggregated_data/.

A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók

prefix://path[:port] biztosítja a kapcsolati protokollt (előtagot), elérési útját és opcionálisan a portot a külső adatforrásnak, ahol a SELECT utasítás eredménye meg lesz írva.

Ha a cél S3-kompatibilis objektumtároló, először egy gyűjtőnek kell léteznie, de a PolyBase szükség esetén almappákat hozhat létre. Az SQL Server 2022 (16.x) támogatja az Azure Data Lake Storage Gen2-t, az Azure Storage V2-t és az S3-kompatibilis objektumtárolót. Az ORC-fájlok jelenleg nem támogatottak.

DATA_SOURCE = external_data_source_name

Megadja annak a külső adatforrás-objektumnak a nevét, amely a külső adatok tárolásának vagy tárolásának helyét tartalmazza. A hely egy Hadoop-fürt vagy egy Azure Blob Storage. Külső adatforrás létrehozásához használja CREATE EXTERNAL DATA SOURCE (Transact-SQL).

FILE_FORMAT = external_file_format_name

Megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatfájl formátumát tartalmazza. Külső fájlformátum létrehozásához használja a CREATE EXTERNAL FILE FORMAT (Transact-SQL).

ELUTASÍTÁSi beállítások

A REJECT beállítások nem érvényesek a CREATE EXTERNAL TABLE AS SELECT utasítás futtatásakor. Ehelyett itt vannak megadva, hogy az adatbázis később használhassa őket, amikor adatokat importál a külső táblából. Később, amikor a CREATE TABLE AS SELECT utasítás kiválasztja a külső táblából származó adatokat, az adatbázis az elutasítási beállításokkal határozza meg azoknak a soroknak a számát vagy százalékát, amelyeket az importálás leállítása előtt nem lehet importálni.

  • REJECT_VALUE = reject_value

    Megadja azoknak a soroknak az értékét vagy százalékos értékét, amelyek importálása sikertelen lehet, mielőtt az adatbázis leállítja az importálást.

  • REJECT_TYPE = érték | százalékos

    Egyértelművé teszi, hogy a REJECT_VALUE lehetőség literálérték vagy százalék.

    • érték

      Akkor használatos, ha REJECT_VALUE literális érték, nem százalék. Az adatbázis leállítja a sorok importálását a külső adatfájlból, ha a sikertelen sorok száma meghaladja a reject_value.

      Ha például REJECT_VALUE = 5 és REJECT_TYPE = value, az adatbázis öt sor importálása után leállítja a sorok importálását.

    • százalékos

      Akkor használatos, ha REJECT_VALUE százalékos érték, nem pedig literális érték. Az adatbázis leállítja a sorok importálását a külső adatfájlból, ha a sikertelen sorok százalékos aránya meghaladja a reject_value. A sikertelen sorok százalékos aránya időközönként lesz kiszámítva. Csak dedikált SQL-készletekben érvényes, ha TYPE=HADOOP.

  • REJECT_SAMPLE_VALUE = reject_sample_value

    REJECT_TYPE = percentageesetén kötelező. Megadja az importálni kívánt sorok számát, mielőtt az adatbázis újraszámítja a sikertelen sorok százalékos arányát.

    Ha például REJECT_SAMPLE_VALUE = 1000, az adatbázis kiszámítja a sikertelen sorok százalékos arányát, miután 1000 sort próbált importálni a külső adatfájlból. Ha a sikertelen sorok százalékos aránya kisebb, mint reject_value, az adatbázis további 1000 sort próbál betölteni. Az adatbázis továbbra is újraszámolja a sikertelen sorok százalékos arányát, miután minden további 1000 sort megpróbál importálni.

    Jegyzet

    Mivel az adatbázis időközönként kiszámítja a sikertelen sorok százalékos arányát, a sikertelen sorok tényleges százalékos aránya meghaladhatja a reject_value.

    példa:

    Ez a példa bemutatja, hogyan működik együtt a három REJECT beállítás. Ha például REJECT_TYPE = percentage, REJECT_VALUE = 30, REJECT_SAMPLE_VALUE = 100, a következő forgatókönyv fordulhat elő:

    • Az adatbázis megpróbálja betölteni az első 100 sort, amelyek közül 25 sikertelen és 75 sikeres.
    • A sikertelen sorok százalékos értéke 25%lesz, ami kisebb, mint a 30%elvetésének értéke. Tehát nem kell leállítani a terhelést.
    • Az adatbázis megkísérli betölteni a következő 100 sort. Ezúttal 25 sikeres és 75 sikertelen.
    • A sikertelen sorok százalékos aránya 50%lesz újraszámolva. A sikertelen sorok százalékos aránya túllépte a 30% elutasítási értéket.
    • A terhelés 200 sor betöltése után 50% sikertelen sortal meghiúsul, amely nagyobb a megadott 30% korlátnál.

COMMON_TABLE_EXPRESSION

Egy ideiglenes elnevezett eredménykészletet határoz meg, amelyet közös táblakifejezésnek (CTE) nevezünk. További információ: WITH common_table_expression (Transact-SQL)

VÁLASZD <select_criteria>

Kitölti az új táblát egy SELECT utasítás eredményeivel. select_criteria a SELECT utasítás törzse, amely meghatározza, hogy mely adatokat másolja az új táblába. A SELECT utasításokról további információt SELECT (Transact-SQL)című cikkben talál.

Jegyzet

A SELECT ORDER BY záradéka nincs hatással a CETAS-ra.

Oszlopbeállítások

  • column_name [ ,... n ]

    Az oszlopnevek nem teszik lehetővé a CREATE TABLE alkalmazásban említett oszlopbeállításokat. Ehelyett megadhat egy vagy több oszlopnevet az új táblához. Az új tábla oszlopai a megadott neveket használják. Ha oszlopneveket ad meg, az oszloplistában szereplő oszlopok számának meg kell egyeznie a kiválasztási eredmények oszlopainak számával. Ha nem ad meg oszlopneveket, az új céltábla a select utasítás eredményében szereplő oszlopneveket használja.

    Nem adhat meg más oszlopbeállításokat, például adattípusokat, rendezést vagy nullitást. Ezek az attribútumok a SELECT utasítás eredményeiből származnak. A SELECT utasítással azonban módosíthatja az attribútumokat. Példa: A CETAS használata az oszlopattribútumokmódosításához.

Engedélyek

A parancs futtatásához a adatbázis-felhasználónak az összes ilyen engedélyre vagy tagságra szüksége van:

  • ALTER SCHEMA engedélyt a helyi sémára, amely tartalmazza az új táblát vagy tagságot a db_ddladmin rögzített adatbázis-szerepkörben.
  • CREATE TABLE engedélyt vagy tagságot db_ddladmin rögzített adatbázis-szerepkörben.
  • SELECT engedélyt a select_criteriahivatkozott objektumokra.

A bejelentkezéshez az alábbi engedélyek szükségesek:

  • TÖMEGES MŰVELETEK FELÜGYELETE
  • KÜLSŐ ADATFORRÁS MÓDOSÍTÁSA
  • KÜLSŐ FÁJLFORMÁTUM MÓDOSÍTÁSA
  • Általában engedélyekkel kell rendelkeznie ahhoz, hogy lista mappa tartalmát, és a CETAS HELY mappájába írni.
  • Az Azure Synapse Analytics és analytics platformrendszerben Írási engedélyt a Hadoop-fürt külső mappájába vagy az Azure Blob Storage-ba való írásra.
  • Az SQL Server 2022-ben (16.x) a külső helyre vonatkozó megfelelő engedélyeket is be kell állítani. Írási engedélyt az adatok helyre való kiírására, és olvasási hozzáférésre.
  • Az Azure Blob Storage és az Azure Data Lake Gen2 esetében a SHARED ACCESS SIGNATURE jogkivonatnak a következő jogosultságokat kell biztosítani a tárolón: Olvasási, Írási, Lista, Létrehozás.
  • Az Azure Blog Storage esetében a Allowed Services: Blob jelölőnégyzetet be kell jelölni az SAS-jogkivonat létrehozásához.
  • Az Azure Data Lake Gen2 esetében ki kell jelölni a Allowed Services: Container és Object jelölőnégyzeteket az SAS-jogkivonat létrehozásához.

Fontos

Az ALTER ANY KÜLSŐ ADATFORRÁS engedély lehetővé teszi bármely egyszerű felhasználó számára, hogy külső adatforrás-objektumokat hozzon létre és módosítson, így lehetővé teszi az adatbázis hatókörébe tartozó összes hitelesítő adat elérését is az adatbázisban. Ezt az engedélyt kiemelt jogosultságúnak kell tekinteni, és csak a rendszerben megbízható tagoknak adható.

Hibakezelés

Ha CREATE EXTERNAL TABLE AS SELECT szöveghatárolt fájlba exportál adatokat, az exportálni nem kívánt sorok esetében nincs elutasító fájl.

A külső tábla létrehozásakor az adatbázis megpróbál csatlakozni a külső helyhez. Ha a kapcsolat meghiúsul, a parancs meghiúsul, és a külső tábla nem jön létre. Egy vagy több percig is eltarthat, amíg a parancs meghiúsul, mert az adatbázis legalább háromszor újrapróbálkozza a kapcsolatot.

Ha CREATE EXTERNAL TABLE AS SELECT megszakad vagy sikertelen, az adatbázis egyszeri kísérletet tesz a külső adatforráson már létrehozott új fájlok és mappák eltávolítására.

Az Azure Synapse Analytics és analytics platformrendszerben az adatbázis az adatexportálás során a külső adatforráson előforduló Java-hibákat jelenti.

Megjegyzések

A CREATE EXTERNAL TABLE AS SELECT utasítás befejeződése után Transact-SQL lekérdezéseket futtathat a külső táblán. Ezek a műveletek a lekérdezés időtartamára importálják az adatokat az adatbázisba, kivéve, ha a CREATE TABLE AS SELECT utasítással importálja őket.

A külső tábla nevét és definícióját az adatbázis metaadatai tárolják. Az adatokat a rendszer a külső adatforrásban tárolja.

A CREATE EXTERNAL TABLE AS SELECT utasítás mindig létrehoz egy nem particionált táblát, még akkor is, ha a forrástábla particionált.

AZ SQL Server 2022 (16.x) esetén a allow polybase export beállítást engedélyezni kell sp_configurehasználatával. További információ: allow polybase export konfigurációs beállítás beállítása.

A EXPLAIN használatával létrehozott Azure Synapse Analytics és Analytics platformrendszer lekérdezési terveihez az adatbázis a következő lekérdezésterv-műveleteket használja külső táblákhoz: Külső átrendezés, Külső szórás áthelyezése, Külső partíció áthelyezése.

Az Analytics platformrendszerben a külső tábla létrehozásának előfeltételeként a berendezés rendszergazdájának konfigurálnia kell a Hadoop-kapcsolatot. További információ: "A külső adatokhoz való csatlakozás konfigurálása (Elemzési platformrendszer)" című témakör az Elemzési platformrendszer dokumentációjában, amelyet a Microsoft letöltőközpont tölthet le.

Korlátozások és korlátozások

Mivel a külső táblaadatok az adatbázison kívül találhatók, a biztonsági mentési és visszaállítási műveletek csak az adatbázisban tárolt adatokon működnek. Ennek eredményeképpen csak a metaadatok lesznek biztonsági másolat készítve és visszaállítva.

Az adatbázis nem ellenőrzi a külső adatforráshoz való kapcsolatot egy külső táblát tartalmazó adatbázis biztonsági mentésének visszaállításakor. Ha az eredeti forrás nem érhető el, a külső tábla metaadatainak visszaállítása továbbra is sikeres lesz, de a külső tábla SELECT műveletei sikertelenek lesznek.

Az adatbázis nem garantálja az adatok konzisztenciáját az adatbázis és a külső adatok között. Ön, az ügyfél kizárólagos felelőssége, hogy fenntartsa a külső adatok és az adatbázis közötti konzisztenciát.

Az adatmanipulációs nyelv (DML) műveletei nem támogatottak külső táblákon. A külső adatok módosításához például nem használhatja Transact-SQL Transact-SQL utasítások frissítését, beszúrását vagy törlését.

A CREATE TABLE, DROP TABLE, CREATE STATISTICS, DROP STATISTICS, CREATE VIEW és DROP VIEW az egyetlen adatdefiníciós nyelv (DDL) művelet, amely külső táblákon engedélyezett.

Jegyzet

CETAS-nál nem lehet 1 MB-nál nagyobb LOB-okat használni.

Az Azure Synapse Analytics korlátozásai és korlátozásai

  • Az Azure Synapse Analytics dedikált SQL-készleteiben és az Analytics platformrendszerében a PolyBase legfeljebb 33 000 fájlt használhat fel mappánként 32 egyidejű PolyBase-lekérdezés futtatásakor. Ez a maximális szám az egyes HDFS-mappákban lévő fájlokat és almappákat is tartalmazza. Ha az egyidejűség mértéke kisebb, mint 32, a felhasználó több mint 33 000 fájlt tartalmazó HDFS-mappákon futtathat PolyBase-lekérdezéseket. Javasoljuk, hogy a Hadoop és a PolyBase felhasználói rövidek maradjanak a fájlelérési utakon, és HDFS-mappánként legfeljebb 30 000 fájlt használjanak. Ha túl sok fájlra hivatkozik, a JVM memóriahiányos kivételt tapasztal.

  • Kiszolgáló nélküli SQL-készletekben nem hozhatók létre külső táblák olyan helyen, ahol jelenleg adatokkal rendelkezik. Az adatok tárolására használt hely újbóli felhasználásához a helyet manuálisan kell törölni az ADLS-en. További korlátozások és ajánlott eljárások: Szűrésoptimalizálás – ajánlott eljárások.

Az Azure Synapse Analytics dedikált SQL-készleteiben és az Analytics Platform Systemben, amikor CREATE EXTERNAL TABLE AS SELECT kiválaszt egy RCFile-t, az RCFile oszlopértékei nem tartalmazhatják a pip (|) karaktert.

SET ROWCOUNT (Transact-SQL) nincs hatással a KÜLSŐ TÁBLA LÉTREHOZÁSA KIJELÖLÉSKÉNT parancsra. Hasonló viselkedés eléréséhez használja TOP (Transact-SQL).

A fájlnevekre vonatkozó korlátozásokért tekintse át tárolók, blobok és metaadatok elnevezését és hivatkozását.

Karakterhibák

Az adatokban szereplő alábbi karakterek hibákat okozhatnak, beleértve az elutasított rekordokat, amelyek CREATE EXTERNAL TABLE AS SELECT Parquet-fájlokba.

Az Azure Synapse Analytics és analytics platformrendszerben ez az ORC-fájlokra is vonatkozik.

  • |
  • " (idézőjel karakter)
  • \r\n
  • \r
  • \n

A karaktereket tartalmazó CREATE EXTERNAL TABLE AS SELECT használatához először futtatnia kell a CREATE EXTERNAL TABLE AS SELECT utasítást, hogy az adatokat tagolt szövegfájlokba exportálja, ahol aztán külső eszközzel parquet vagy ORC formátumba konvertálhatja őket.

Parquet használata

A parquet-fájlok használatakor CREATE EXTERNAL TABLE AS SELECT egy parquet-fájlt hoz létre rendelkezésre álló processzoronként, a konfigurált maximális párhuzamossági fokig (MAXDOP). Minden fájl akár 190 GB-ra is nőhet, miután az SQL Server szükség szerint további Parquet-fájlokat fog létrehozni.

A lekérdezési tipp OPTION (MAXDOP n) csak a CREATE EXTERNAL TABLE AS SELECTSELECT részét érinti. Nincs hatással a parquet fájlok számára. Csak az adatbázisszintű MAXDOP és a példányszintű MAXDOP van figyelembe véve.

Zár

Megosztott zárolást hoz létre a SCHEMARESOLUTION objektumon.

Támogatott adattípusok

A CETAS az alábbi SQL-adattípusokkal rendelkező eredményhalmazok tárolására használható:

  • bináris
  • varbinary
  • char
  • varchar
  • nchar
  • nvarchar
  • kisdátum
  • dátum
  • datetime
  • datetime2
  • dátum-idő eltolás
  • Idő
  • decimális
  • Numerikus
  • float
  • valódi
  • bigint
  • tinyint
  • smallint
  • Int
  • bigint
  • egy kicsit
  • pénz
  • aprópénz

Példák

Egy. Hadoop-tábla létrehozása a CREATE EXTERNAL TABLE AS SELECT használatával

A következőkre vonatkozik: Azure Synapse Analytics és Analytics platformrendszer

Az alábbi példa egy hdfsCustomer nevű új külső táblát hoz létre, amely a forrástábla dimCustomeroszlopdefinícióit és adatait használja.

A tábladefiníció az adatbázisban van tárolva, és a SELECT utasítás eredményeit a rendszer exportálja a Hadoop külső adatforrás /pdwdata/customer.tbl fájljába customer_ds. A fájl a külső fájlformátum customer_ffszerint van formázva.

A fájlnevet az adatbázis hozza létre, és tartalmazza a lekérdezésazonosítót, hogy a fájl könnyebben igazodjon az azt létrehozó lekérdezéshez.

Az ügyfélkönyvtár előtti hdfs://xxx.xxx.xxx.xxx:5000/files/ elérési útnak már léteznie kell. Ha az Ügyfél könyvtár nem létezik, az adatbázis létrehozza a címtárat.

Jegyzet

Ez a példa 5000-et határoz meg. Ha a port nincs megadva, az adatbázis alapértelmezett portként a 8020-at használja.

Az eredményül kapott Hadoop-hely és fájlnév hdfs:// xxx.xxx.xxx.xxx:5000/files/Customer/ QueryID_YearMonthDay_HourMinutesSeconds_FileIndex.txt.lesz.

-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE hdfsCustomer
    WITH (
            LOCATION = '/pdwdata/customer.tbl',
            DATA_SOURCE = customer_ds,
            FILE_FORMAT = customer_ff
            ) AS

SELECT *
FROM dimCustomer;
GO

B. Lekérdezési tipp használata a CREATE EXTERNAL TABLE AS SELECT használatával

A következőkre vonatkozik: Azure Synapse Analytics és Analytics platformrendszer

Ez a lekérdezés a CREATE EXTERNAL TABLE AS SELECT utasítással való lekérdezés-illesztés tippjének alapszintaxisát jeleníti meg. A lekérdezés elküldése után az adatbázis a kivonat-illesztés stratégiájával hozza létre a lekérdezéstervet. További információ az illesztési tippekről és az OPTION záradék használatáról: OPTION záradék (Transact-SQL).

Jegyzet

Ez a példa 5000-et határoz meg. Ha a port nincs megadva, az adatbázis alapértelmezett portként a 8020-at használja.

-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE dbo.FactInternetSalesNew
    WITH (
            LOCATION = '/files/Customer',
            DATA_SOURCE = customer_ds,
            FILE_FORMAT = customer_ff
            ) AS

SELECT T1.*
FROM dbo.FactInternetSales T1
INNER JOIN dbo.DimCustomer T2
    ON (T1.CustomerKey = T2.CustomerKey)
OPTION (HASH JOIN);
GO

C. Oszlopattribútumok módosítása a CETAS használatával

A következőkre vonatkozik: Azure Synapse Analytics és Analytics platformrendszer

Ez a példa CETAS használatával módosítja az adattípusokat, a nullképességet és a rendezést a FactInternetSales tábla több oszlopában.

-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE dbo.FactInternetSalesNew
    WITH (
            LOCATION = '/files/Customer',
            DATA_SOURCE = customer_ds,
            FILE_FORMAT = customer_ff
            ) AS

SELECT T1.ProductKey AS ProductKeyNoChange,
    T1.OrderDateKey AS OrderDate,
    T1.ShipDateKey AS ShipDate,
    T1.CustomerKey AS CustomerKeyNoChange,
    T1.OrderQuantity AS Quantity,
    T1.SalesAmount AS MONEY
FROM dbo.FactInternetSales T1
INNER JOIN dbo.DimCustomer T2
    ON (T1.CustomerKey = T2.CustomerKey)
OPTION (HASH JOIN);
GO

D. A CREATE EXTERNAL TABLE AS SELECT használata az adatok parquetként való exportálásához

A következőkre vonatkozik: SQL Server 2022 (16.x)

Az alábbi példa egy ext_sales nevű új külső táblát hoz létre, amely a SalesOrderDetailtábla AdventureWorks2025 adatait használja. Engedélyezni kell a a polybase exportálási konfigurációs beállítását.

A SELECT utasítás eredménye a korábban konfigurált és s3_edselnevezett S3-kompatibilis objektumtárolóba, valamint a s3_dscként létrehozott megfelelő hitelesítő adatokra lesz mentve. A parkettafájl helye <ip>:<port>/cetas/sales.parquet lesz, ahol cetas a korábban létrehozott tárolótároló.

Jegyzet

A Delta formátum jelenleg csak írásvédettként támogatott.

-- Credential to access the S3-compatible object storage
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
    WITH IDENTITY = 'S3 Access Key',
        SECRET = '<accesskeyid>:<secretkeyid>'
GO

-- S3-compatible object storage data source
CREATE EXTERNAL DATA SOURCE s3_eds
    WITH (
            LOCATION = 's3://<ip>:<port>',
            CREDENTIAL = s3_dsc
            )

-- External File Format for PARQUET
CREATE EXTERNAL FILE FORMAT ParquetFileFormat
    WITH (FORMAT_TYPE = PARQUET);
GO

CREATE EXTERNAL TABLE ext_sales
    WITH (
            LOCATION = '/cetas/sales.parquet',
            DATA_SOURCE = s3_eds,
            FILE_FORMAT = ParquetFileFormat
            ) AS

SELECT *
FROM AdventureWorks2022.[Sales].[SalesOrderDetail];
GO

E. A CREATE EXTERNAL TABLE AS SELECT használata a delta táblából a parquethez

A következőkre vonatkozik: SQL Server 2022 (16.x)

Az alábbi példa egy Delta_to_Parquetnevű új külső táblát hoz létre, amely egy s3_deltanevű S3-kompatibilis objektumtárolóban található Delta Table típusú adatokat használ, és az eredményt egy másik s3_parquet nevű adatforrásba írja parquet-fájlként. Ehhez a példa az OPENROWSET parancsot használja. Engedélyezni kell a a polybase exportálási konfigurációs beállítását.

-- External File Format for PARQUET
CREATE EXTERNAL FILE FORMAT ParquetFileFormat
    WITH (FORMAT_TYPE = PARQUET);
GO

CREATE EXTERNAL TABLE Delta_to_Parquet
    WITH (
            LOCATION = '/backup/sales.parquet',
            DATA_SOURCE = s3_parquet,
            FILE_FORMAT = ParquetFileFormat
            ) AS

SELECT *
FROM OPENROWSET(BULK '/delta/sales_fy22/', FORMAT = 'DELTA', DATA_SOURCE = 's3_delta') AS [r];
GO

F. KÜLSŐ TÁBLA LÉTREHOZÁSA SELECT nézetben forrásként

A következőkre vonatkozik: Azure Synapse Analytics kiszolgáló nélküli SQL-készletek és dedikált SQL-készletek.

Használja az alábbi példát sablonként a CETAS forrásként való írásához egy felhasználó által definiált nézettel, felügyelt identitás használatával a hitelesítéshez és a abfs: végponthoz:

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SynapseSQLwriteable] WITH (
    LOCATION = 'abfs[s]://<file_system>@<account_name>.dfs.core.windows.net/<path>/<file_name>',
    CREDENTIAL = [WorkspaceIdentity]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SynapseSQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

G. KÜLSŐ TÁBLA LÉTREHOZÁSA SELECT nézetben forrásként

A következőkre vonatkozik: Azure Synapse Analytics kiszolgáló nélküli SQL-készletek és dedikált SQL-készletek.

Ebben a példában egy sablonkódot láthatunk a CETAS felhasználó által definiált forrásként való írásához, felügyelt identitás hitelesítésként való használatához és https:.

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SynapseSQLwriteable] WITH (
    LOCATION = 'https://<mystoageaccount>.dfs.core.windows.net/<mycontainer>/<mybaseoutputfolderpath>',
    CREDENTIAL = [WorkspaceIdentity]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SynapseSQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

Következő lépések

A következőkre vonatkozik:Felügyelt Azure SQL-példány

Létrehoz egy külső táblát, majd exportálja párhuzamosan egy Transact-SQL SELECT utasítás eredményeit.

A CREATE EXTERNAL TABLE AS SELECT (CETAS) használatával a következő feladatokat hajthatja végre:

  • Hozzon létre egy külső táblát parquet- vagy CSV-fájlok tetején az Azure Blob Storage vagy az Azure Data Lake Storage (ADLS) Gen2 szolgáltatásban.
  • Ezzel párhuzamosan exportálja egy T-SQL SELECT utasítás eredményeit a létrehozott külső táblába.
  • A felügyelt Azure SQL-példány további adatvirtualizálási képességeiért lásd Felügyelt Azure SQL-példány adatvirtualizálását.

Jegyzet

Ez a tartalom csak a felügyelt Azure SQL-példányokra vonatkozik. Más platformok esetén válassza a CREATE EXTERNAL TABLE AS SELECT megfelelő verzióját a legördülő listából.

Transact-SQL szintaxis konvenciói

Szintaxis

CREATE EXTERNAL TABLE [ [database_name  . [ schema_name ] . ] | schema_name . ] table_name
    WITH (
        LOCATION = 'path_to_folder/',  
        DATA_SOURCE = external_data_source_name,  
        FILE_FORMAT = external_file_format_name
        [, PARTITION ( column_name [ , ...n ] ) ]
)
    AS <select_statement>  
[;]

<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>

Érvek

[ database_name . [ schema_name ] . ] | schema_name . ] table_name

A létrehozandó tábla egy-háromrészes neve. Külső tábla esetén a rendszer csak a tábla metaadatait tárolja. A rendszer nem helyez át vagy tárol tényleges adatokat.

LOCATION = "path_to_folder"

Megadja, hogy hol írja a SELECT utasítás eredményeit a külső adatforrásra. A gyökérmappa a külső adatforrásban megadott adathely. A LOCATION-nak egy mappára kell mutatnia, és záró /kell rendelkeznie. Példa: aggregated_data/.

A CETAS célmappájának üresnek kell lennie. Ha az elérési út és a mappa még nem létezik, a rendszer automatikusan létrehozza őket.

DATA_SOURCE = external_data_source_name

Megadja annak a külső adatforrás-objektumnak a nevét, amely a külső adatok tárolási helyét tartalmazza. Külső adatforrás létrehozásához használja CREATE EXTERNAL DATA SOURCE (Transact-SQL).

FILE_FORMAT = external_file_format_name

Megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatfájl formátumát tartalmazza. Külső fájlformátum létrehozásához használja a CREATE EXTERNAL FILE FORMAT (Transact-SQL). Jelenleg csak a FORMAT_TYPE=PARQUET és FORMAT_TYPE=DELIMITEDTEXT formátumú külső fájlformátumok támogatottak. A DELIMITEDTEXT formátumú GZip-tömörítés nem támogatott.

[, PARTÍCIÓ ( oszlop neve [ , ... n ] ) ]

A kimeneti adatokat több parquet fájl elérési útjára particionálja. A particionálás adott oszlopokon (column_name) történik, amelyek megfelelnek a HELY helyettesítő karaktereinek (*) a megfelelő particionálási oszlopnak. A PARTÍCIÓ rész oszlopainak számának meg kell egyeznie a hely helyettesítő karaktereinek számával. Legalább egy olyan oszlopnak kell lennie, amely nincs particionálásra használva.

<COMMON_TABLE_EXPRESSION>

Egy ideiglenes elnevezett eredménykészletet határoz meg, amelyet közös táblakifejezésnek (CTE) nevezünk. További információ: WITH common_table_expression (Transact-SQL).

VÁLASZD <select_criteria>

Kitölti az új táblát egy SELECT utasítás eredményeivel. select_criteria a SELECT utasítás törzse, amely meghatározza, hogy mely adatokat másolja az új táblába. A SELECT utasításokról további információt SELECT (Transact-SQL)című cikkben talál.

Jegyzet

A SELECT ORDER BY záradéka a CETAS esetében nem támogatott.

Engedélyek

Engedélyek a tárterületen

Engedélyekkel kell rendelkeznie a mappatartalmak listázásához és a CETAS működéséhez szükséges HELY elérési útba való íráshoz.

A támogatott hitelesítési módszerek felügyelt identitások vagy sas-jogkivonatok.

  • Ha felügyelt identitást használ a hitelesítéshez, győződjön meg arról, hogy a felügyelt SQL-példány szolgáltatásnévének szerepköre Storage Blob-adatszolgáltatói a céltárolón.
  • SAS-jogkivonat használata esetén olvasási, írási és listaengedélyek szükségesek.
  • Az Azure Blog Storage esetében a Allowed Services: Blob jelölőnégyzetet be kell jelölni az SAS-jogkivonat létrehozásához.
  • Az Azure Data Lake Gen2 esetében ki kell jelölni a Allowed Services: Container és Object jelölőnégyzeteket az SAS-jogkivonat létrehozásához.

A felhasználó által hozzárendelt felügyelt identitások nem támogatottak. A Microsoft Entra átengedési hitelesítése nem támogatott. A Microsoft Entra-azonosító (korábban Azure Active Directory).

Engedélyek a felügyelt SQL-példányban

A parancs futtatásához a adatbázis-felhasználónak az összes ilyen engedélyre vagy tagságra szüksége van:

  • ALTER SCHEMA engedélyt a helyi sémára, amely tartalmazza az új táblát vagy tagságot a db_ddladmin rögzített adatbázis-szerepkörben.
  • CREATE TABLE engedélyt vagy tagságot db_ddladmin rögzített adatbázis-szerepkörben.
  • SELECT engedélyt a select_criteriahivatkozott objektumokra.

A bejelentkezéshez az alábbi engedélyek szükségesek:

  • TÖMEGES MŰVELETEK FELÜGYELETE
  • KÜLSŐ ADATFORRÁS MÓDOSÍTÁSA
  • KÜLSŐ FÁJLFORMÁTUM MÓDOSÍTÁSA

Fontos

Az ALTER ANY KÜLSŐ ADATFORRÁS engedély lehetővé teszi bármely egyszerű felhasználó számára, hogy külső adatforrás-objektumokat hozzon létre és módosítson, így lehetővé teszi az adatbázis hatókörébe tartozó összes hitelesítő adat elérését is az adatbázisban. Ezt az engedélyt kiemelt jogosultságúnak kell tekinteni, és csak a rendszerben megbízható tagoknak adható.

Támogatott adattípusok

A CETAS az alábbi SQL-adattípusokkal tárolja az eredményhalmazokat:

  • bináris
  • varbinary
  • char
  • varchar
  • nchar
  • nvarchar
  • smalldatetime
  • dátum
  • datetime
  • datetime2
  • dátum-idő eltolás
  • Idő
  • decimális
  • Numerikus
  • float
  • valódi
  • bigint
  • tinyint
  • smallint
  • Int
  • bigint
  • egy kicsit
  • pénz
  • aprópénz

Jegyzet

Az 1 MB-nál nagyobb LOB-k nem használhatók a CETAS-sel.

Korlátozások és korlátozások

  • A felügyelt Azure SQL-példány CREATE EXTERNAL TABLE AS SELECT (CETAS) alapértelmezés szerint le van tiltva. További információt a következő szakaszban talál, alapértelmezés szerint le van tiltva.
  • A felügyelt Azure SQL-példány adatvirtualizálásával kapcsolatos korlátozásokról és ismert problémákról további információt Korlátozások és ismert problémákcímű témakörben talál.

Mivel a külső táblaadatok az adatbázison kívül találhatók, a biztonsági mentési és visszaállítási műveletek csak az adatbázisban tárolt adatokon működnek. Ennek eredményeképpen csak a metaadatok lesznek biztonsági másolat készítve és visszaállítva.

Az adatbázis nem ellenőrzi a külső adatforráshoz való kapcsolatot egy külső táblát tartalmazó adatbázis biztonsági mentésének visszaállításakor. Ha az eredeti forrás nem érhető el, a külső tábla metaadatainak visszaállítása továbbra is sikeres, de a külső tábla SELECT műveletei sikertelenek.

Az adatbázis nem garantálja az adatok konzisztenciáját az adatbázis és a külső adatok között. Ön, az ügyfél kizárólagos felelőssége, hogy fenntartsa a külső adatok és az adatbázis közötti konzisztenciát.

Az adatmanipulációs nyelv (DML) műveletei nem támogatottak külső táblákon. A külső adatok módosításához például nem használhatja Transact-SQL Transact-SQL utasítások frissítését, beszúrását vagy törlését.

A CREATE TABLE, DROP TABLE, CREATE STATISTICS, DROP STATISTICS, CREATE VIEW és DROP VIEW az egyetlen adatdefiníciós nyelv (DDL) művelet, amely külső táblákon engedélyezett.

A külső táblák nem hozhatók létre olyan helyen, ahol jelenleg adatokkal rendelkezik. Az adatok tárolására használt hely újbóli felhasználásához a helyet manuálisan kell törölni az ADLS-en.

SET ROWCOUNT (Transact-SQL) nincs hatással a KÜLSŐ TÁBLA LÉTREHOZÁSA KIJELÖLÉSKÉNT parancsra. Hasonló viselkedés eléréséhez használja TOP (Transact-SQL).

A fájlnevekre vonatkozó korlátozásokért tekintse át tárolók, blobok és metaadatok elnevezését és hivatkozását.

Tárolási típusok

A fájlok az Azure Data Lake Storage Gen2-ben vagy az Azure Blob Storage-ban tárolhatók. A fájlok lekérdezéséhez meg kell adnia a helyet egy adott formátumban, és a külső forrás és végpont/protokoll típusának megfelelő helytípus-előtagot kell használnia, például a következő példákat:

--Blob Storage endpoint
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet

--Data Lake endpoint
adls://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet

Fontos

A megadott Hely típusú előtag a kommunikáció optimális protokolljának kiválasztására és az adott tártípus által kínált speciális képességek kihasználására szolgál. Az általános https:// előtag használata le van tiltva. Mindig használjon végpontspecifikus előtagokat.

Alapértelmezés szerint letiltva

A CREATE EXTERNAL TABLE AS SELECT (CETAS) lehetővé teszi, hogy adatokat exportáljon a felügyelt SQL-példányból egy külső tárfiókba, így ezekkel a képességekkel adatkiszivárgási kockázatot jelenthet. Ezért a CETAS alapértelmezés szerint le van tiltva a felügyelt Azure SQL-példány esetében.

CETAS engedélyezése

A felügyelt Azure SQL-példány CETAS-ét csak emelt szintű Azure-engedélyeket igénylő módszerrel lehet engedélyezni, és a T-SQL-en keresztül nem lehet engedélyezni. Az adatok jogosulatlan kiszivárgásának kockázata miatt a CETAS nem engedélyezhető a sp_configure T-SQL tárolt eljárással, ehelyett a felügyelt SQL-példányon kívüli felhasználói műveletre van szükség.

A CETAS engedélyezésére vonatkozó engedélyek

Az Azure PowerShellen keresztüli engedélyezéshez a parancsot futtató felhasználónak közreműködői vagy SQL Security Manager Azure RBAC-szerepkörrel kell rendelkeznie a felügyelt SQL-példányhoz.

Ehhez is létrehozhat egyéni szerepkört, amely megköveteli a Olvasási és Írás műveletet a Microsoft.Sql/managedInstances/serverConfigurationOptions művelethez.

A CETAS engedélyezésének módszerei

A PowerShell-parancsok számítógépen való meghívásához Az csomag 9.7.0-s vagy újabb verzióját helyileg kell telepíteni. Vagy fontolja meg az Azure Cloud Shell használatával az Azure PowerShell futtatását shell.azure.com.

Először jelentkezzen be az Azure-ba, és állítsa be az előfizetés megfelelő környezetét:

Login-AzAccount
$SubscriptionID = "<YourSubscriptionIDHERE>"
Select-AzSubscription -SubscriptionName $SubscriptionID

A kiszolgálókonfigurációs beállítás allowPolybaseExportkezeléséhez módosítsa a következő PowerShell-szkripteket az előfizetéshez és az SQL által felügyelt példány nevéhez, majd futtassa a parancsokat. További információ: Set-AzSqlServerConfigurationOption és Get-AzSqlServerConfigurationOption.

# Enable ServerConfigurationOption with name "allowPolybaseExport"
Set-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport" -Value 1

Az "allowPolybaseExport" kiszolgálókonfigurációs beállítás letiltása:

# Disable ServerConfigurationOption with name "allowPolybaseExport"
Set-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport" -Value 0

Az "allowPolybaseExport" kiszolgálókonfigurációs beállítás aktuális értékének lekérése:

# Get ServerConfigurationOptions with name "allowPolybaseExport"
Get-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport"

A CETAS állapotának ellenőrzése

Bármikor ellenőrizheti a CETAS konfigurációs beállítás aktuális állapotát.

Csatlakozzon a felügyelt SQL-példányhoz. Futtassa a következő T-SQL-t, és figyelje meg a válasz value oszlopát. A kiszolgáló konfigurációjának módosítása után a lekérdezés eredményeinek meg kell egyeznie a kívánt beállítással.

SELECT [name], [value] FROM sys.configurations WHERE name ='allow polybase export';

Elhárítása

A felügyelt Azure SQL-példány adatvirtualizálásának hibaelhárításához további lépéseket Ahibaelhárítása című témakörben talál. A CETAS hibakezelése és gyakori hibaüzenetei a felügyelt Azure SQL-példányban a következők.

Hibakezelés

Ha CREATE EXTERNAL TABLE AS SELECT szöveghatárolt fájlba exportál adatokat, az exportálni nem kívánt sorok esetében nincs elutasító fájl.

A külső tábla létrehozásakor az adatbázis megpróbál csatlakozni a külső helyhez. Ha a kapcsolat meghiúsul, a parancs meghiúsul, és a külső tábla nem jön létre. Egy vagy több percig is eltarthat, amíg a parancs meghiúsul, mert az adatbázis legalább háromszor újrapróbálkozza a kapcsolatot.

Gyakori hibaüzenetek

Ezek a gyakori hibaüzenetek gyors magyarázatot adnak a FELÜGYELT Azure SQL-példány CETAS-ére.

  1. A tárolóban már meglévő hely megadása.

    Megoldás: A tárolási hely törlése (beleértve a pillanatképet is), vagy a helyparaméter módosítása a lekérdezésben.

    Minta hibaüzenet: Msg 15842: Cannot create external table. External table location already exists.

  2. JSON-objektumokkal formázott oszlopértékek.

    Megoldás: Konvertálja az értékoszlopot egyetlen VARCHAR vagy NVARCHAR oszlopmá, vagy explicit módon definiált típusú oszlopok készletére.

    Minta hibaüzenet: Msg 16549: Values in column value are formatted as JSON objects and cannot be written using CREATE EXTERNAL TABLE AS SELECT.

  3. Érvénytelen helyparaméter (például több //).

    Megoldás: Helyparaméter javítása.

    Minta hibaüzenet: Msg 46504: External option 'LOCATION' is not valid. Ensure that the length and range are appropriate.

  4. Hiányzik az egyik szükséges beállítás (DATA_SOURCE, FILE_FORMAT, HELY).

    Megoldás: Adja hozzá a hiányzó paramétert a CETAS-lekérdezéshez.

    Minta hibaüzenet: Msg 46505: Missing required external DDL option 'FILE_FORMAT'

  5. Hozzáférési problémák (érvénytelen hitelesítő adatok, lejárt hitelesítő adatok vagy nem megfelelő engedélyekkel rendelkező hitelesítő adatok). A másik lehetőség egy érvénytelen elérési út, ahol a felügyelt SQL-példány 404-es hibát kapott a tárolótól.

    Megoldás: Ellenőrizze a hitelesítő adatok érvényességét és engedélyeit. Másik lehetőségként ellenőrizze, hogy az elérési út érvényes-e, és létezik-e tárterület. Használja az URL-elérési utat adls://<container>@<storage_account>.blob.core.windows.net/<path>/.

    Minta hibaüzenet: Msg 15883: Access check for '<Read/Write>' operation against '<Storage>' failed with HRESULT = '0x...'

  6. A DATA_SOURCE helyének része helyettesítő karaktereket tartalmaz.

    Megoldás: Távolítsa el a helyettesítő karaktereket a helyről.

    Minta hibaüzenet: Msg 16576: Location provided by DATA_SOURCE '<data source name>' cannot contain any wildcards.

  7. A LOCATION paraméterben lévő helyettesítő karakterek száma és a particionált oszlopok száma nem egyezik meg.

    Megoldás: Győződjön meg arról, hogy ugyanannyi helyettesítő karakter található a LOCATION-ban, mint a partícióoszlopok.

    Minta hibaüzenet: Msg 16577: Number of wildcards in LOCATION must match the number of columns in PARTITION clause.

  8. A PARTITION záradék oszlopneve nem egyezik a lista egyik oszlopával sem.

    Megoldás: Győződjön meg arról, hogy a PARTITION oszlopai érvényesek.

    Minta hibaüzenet: Msg 16578: The column name '<column name>' specified in the PARTITION option does not match any column specified in the column list

  9. Az oszlop többször is meg van adva a PARTÍCIÓ listában.

    Megoldás: Győződjön meg arról, hogy a PARTITION záradék oszlopai egyediek.

    Minta hibaüzenet: Msg 16579: A column has been specified more than once in the PARTITION list. Column '<column name>' is specified more than once.

  10. Az oszlop többször lett megadva a PARTÍCIÓ listában, vagy nem egyezik a SELECT listából származó oszlopokkal.

    Megoldás: Győződjön meg arról, hogy nincsenek ismétlődő elemek a partíciólistában, és a partícióoszlopok a SELECT részben találhatók.

    Minta hibaüzenetek: Msg 11569: Column <column name> has been specified more than once in the partition columns list. Please try again with a valid parameter. vagy Msg 11570: Column <column name> specified in the partition columns list does not match any columns in SELECT clause. Please try again with a valid parameter.

  11. Az összes oszlop használata a PARTÍCIÓ listában.

    Megoldás: A SELECT rész legalább egyik oszlopa nem lehet a lekérdezés PARTÍCIÓ része.

    Minta hibaüzenet: Msg 11571: All output columns in DATA_EXPORT query are declared as PARTITION columns. DATA_EXPORT query requires at least one column to export.

  12. A funkció le van tiltva.

    Megoldás: Engedélyezze a funkciót a jelen cikk alapértelmezés szerint letiltott szakaszával.

    Minta hibaüzenet: Msg 46552: Writing into an external table is disabled. See 'https://go.microsoft.com/fwlink/?linkid=2201073' for more information

Zár

Megosztott zárolást hoz létre a SCHEMARESOLUTION objektumon.

Példák

Egy. Külső tábla létrehozása felügyelt identitással a CETAS használatával

Ez a példa a CETAS forrásnézettel történő írásához nyújt kódot a rendszer által felügyelt identitás hitelesítés használatával.

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SQLwriteable] WITH (
    LOCATION = 'adls://container@mystorageaccount.blob.core.windows.net/mybaseoutputfolderpath',
    CREDENTIAL = [WorkspaceIdentity]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

B. Külső tábla SAS-hitelesítéssel történő létrehozása a CETAS használatával

Ez a példa a CETAS forrásnézettel történő írására szolgáló kódot tartalmaz, amely egy SAS-jogkivonatot használ hitelesítésként.

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL SAS_token
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE',
  -- Remove ? from the beginning of the SAS token
  SECRET = '<azure_shared_access_signature>' ;
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SQLwriteable] WITH (
    LOCATION = 'adls://container@mystorageaccount.blob.core.windows.net/mybaseoutputfolderpath',
    CREDENTIAL = [SAS_token]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

C. Külső tábla létrehozása egyetlen parquet-fájlba a tárban

A következő két példa bemutatja, hogyan oszthat ki néhány adatot egy helyi táblából egy külső táblába, amely az Azure Blob Storage-tárolóban parquet-fájl(ok)ként van tárolva. Úgy vannak kialakítva, hogy AdventureWorks2025 adatbázissal működjenek. Ez a példa egy külső tábla egyetlen parquet-fájlként való létrehozását mutatja be, ahol a következő példa bemutatja, hogyan hozhat létre külső táblát, és particionálhatja azt több, parquet fájlokkal rendelkező mappába.

Az alábbi példa felügyelt identitás használatával működik a hitelesítéshez. Ezért győződjön meg arról, hogy az Azure SQL Managed Instance szolgáltatásnév rendelkezik Storage Blob Data Contributor szerepkörsel az Azure Blob Storage-tárolóban. Másik lehetőségként módosíthatja a példát, és használhatja a közös hozzáférésű titkos kód (SAS) jogkivonatokat a hitelesítéshez.

Az alábbi példában egy külső táblát hoz létre egyetlen parquet-fájlba az Azure Blob Storage-ban, és a 2014. január 1-je és 2014. január 1.-e közötti rendelések SalesOrderHeader táblából választva:

--Example 1: Creating an external table into a single parquet file on the storage, selecting from SalesOrderHeader table for orders older than 1-Jan-2014:
USE [AdventureWorks2022]
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Strong Password';
GO

CREATE DATABASE SCOPED CREDENTIAL [CETASCredential]
    WITH IDENTITY = 'managed identity';
GO

CREATE EXTERNAL DATA SOURCE [CETASExternalDataSource]
WITH (
    LOCATION = 'abs://container@storageaccount.blob.core.windows.net',
    CREDENTIAL = [CETASCredential] );
GO

CREATE EXTERNAL FILE FORMAT [CETASFileFormat]
WITH(
    FORMAT_TYPE=PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
    );
GO

-- Count how many rows we plan to offload
SELECT COUNT(*) FROM [AdventureWorks2022].[Sales].[SalesOrderHeader] WHERE
        OrderDate < '2013-12-31';

-- CETAS write to a single file, archive all data older than 1-Jan-2014:
CREATE EXTERNAL TABLE SalesOrdersExternal
WITH (
    LOCATION = 'SalesOrders/',
    DATA_SOURCE = [CETASExternalDataSource],
    FILE_FORMAT = [CETASFileFormat])
AS 
    SELECT 
        *
    FROM 
        [AdventureWorks2022].[Sales].[SalesOrderHeader]
    WHERE
        OrderDate < '2013-12-31';

-- you can query the newly created external table
SELECT COUNT (*) FROM SalesOrdersExternal;

D. Particionált külső tábla létrehozása több, mappafában tárolt parquet-fájlba

Ez a példa az előző példára épül, amely bemutatja, hogyan hozhat létre egy külső táblát, és particionálhatja azt több, parquet fájlokat tartalmazó mappába. A particionált táblákkal teljesítménybeli előnyöket érhet el, ha az adathalmaz nagy.

Hozzon létre egy külső táblát SalesOrderHeader adatokból a B példa lépéseivel, de a külső táblát OrderDate év és hónap szerint particionálhatja. Particionált külső táblák lekérdezésekor kihasználhatjuk a partíciók eltávolítását a teljesítmény szempontjából.

--CETAS write to a folder hierarchy (partitioned table):
CREATE EXTERNAL TABLE SalesOrdersExternalPartitioned
WITH (
    LOCATION = 'PartitionedOrders/year=*/month=*/', 
    DATA_SOURCE = CETASExternalDataSource,
    FILE_FORMAT = CETASFileFormat,
    --year and month will correspond to the two respective wildcards in folder path    
    PARTITION (
        [Year],
        [Month]
        ) 
    )
AS
    SELECT
        *,
        YEAR(OrderDate) AS [Year],
        MONTH(OrderDate) AS [Month]
    FROM [AdventureWorks2022].[Sales].[SalesOrderHeader]
    WHERE
        OrderDate < '2013-12-31';
GO

-- you can query the newly created partitioned external table
SELECT COUNT (*) FROM SalesOrdersExternalPartitioned;

Következő lépések