Megosztás:


KÜLSŐ TÁBLA LÉTREHOZÁSA (Transact-SQL)

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Raktár a Microsoft FabricbanSQL-adatbázis a Microsoft Fabricban

Létrehoz egy külső táblát.

Ez a cikk a választott SQL-termék szintaxisát, argumentumait, megjegyzéseit, engedélyeit és példáit ismerteti.

Termék kiválasztása

A következő sorban válassza ki a kívánt terméknevet, és csak az adott termék adatai jelenjenek meg.

* SQL Server *  

felügyelt Azure SQL-példány

 

Áttekintés: SQL Server

Ez a parancs létrehoz egy külső táblát a PolyBase számára a Hadoop-fürtben vagy az Azure Blob Storage PolyBase külső táblában tárolt adatok eléréséhez, amely a Hadoop-fürtben vagy az Azure Blob Storage-ban tárolt adatokra hivatkozik.

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

Használjon külső táblát egy külső adatforrással a PolyBase-lekérdezésekhez. A külső adatforrások kapcsolat létesítésére és az elsődleges használati esetek támogatására szolgálnak:

A külső táblák külső adatforráson alapulnak.

Transact-SQL szintaxis konvenciók

Szintaxis

-- Create a new external table
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'folder_or_filepath' ,
        DATA_SOURCE = external_data_source_name ,
        [ FILE_FORMAT = external_file_format_name ]
        [ , <reject_options> [ , ...n ] ]
    )
[ ; ]

<reject_options> ::=
{
    | REJECT_TYPE = { value | percentage }
    | REJECT_VALUE = reject_value
    | REJECT_SAMPLE_VALUE = reject_sample_value ,
    | REJECTED_ROW_LOCATION = '/REJECT_Directory'
}

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

Érvek

{ database_name.schema_name.table_name | schema_name.table_name | table_name}

A létrehozandó tábla egy-háromrészes neve.

Külső táblák esetében az SQL csak a tábla metaadatait tárolja, valamint a Hadoopban vagy az Azure Blob Storage-ban hivatkozott fájlra vagy mappára vonatkozó alapvető statisztikákat. A rendszer nem helyez át vagy tárol tényleges adatokat az SQL Serveren.

Fontos

A legjobb teljesítmény érdekében, ha a külső adatforrás-illesztőprogram támogatja a háromrészes nevet, meg kell adnia a háromrészes nevet.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE támogatja az oszlopnév, az adattípus, a nullhihetőség és a rendezés konfigurálását. Külső táblákon nem használható DEFAULT CONSTRAINT .

Az oszlopdefinícióknak, beleértve az adattípusokat és az oszlopok számát, meg kell egyeznie a külső fájlok adataival. Ha eltérés van, a fájlsorokat a rendszer elutasítja a tényleges adatok lekérdezésekor.

LOCATION = "folder_or_filepath"

Megadja a Hadoopban vagy az Azure Blob Storage-ban tárolt tényleges adatok mappáit vagy fájlelérési útját és fájlnevét. Emellett az S3-kompatibilis objektumtárolás az SQL Server 2022-től (16.x)) is támogatott. A hely a gyökérmappából indul ki. A gyökérmappa a külső adatforrásban megadott adathely.

Az SQL Serverben a CREATE EXTERNAL TABLE utasítás létrehozza az elérési utat és a mappát, ha még nem létezik. Ezután INSERT INTO adatokat exportálhat egy helyi SQL Server-táblából a külső adatforrásba. További információ: PolyBase-lekérdezési forgatókönyvek.

Ha mappaként adja meg LOCATION , a külső táblából kiválasztott PolyBase-lekérdezés lekéri a fájlokat a mappából és annak összes almappájából. A Hadoophoz hasonlóan a PolyBase sem ad vissza rejtett mappákat. Nem ad vissza olyan fájlokat sem, amelyeknek a neve aláhúzással () vagy ponttal (_.) kezdődik.

A következő képen látható példában, ha LOCATION='/webdata/'egy PolyBase-lekérdezés sorokat ad vissza a következőtől mydata.txt : és mydata2.txt. Nem tér vissza mydata3.txt , mert egy rejtett almappában lévő fájl. És nem tér vissza _hidden.txt , mert rejtett fájl.

Külső táblák mappáinak és fájladatainak diagramja.

Az alapértelmezett és csak a gyökérmappából való olvasás módosításához állítsa a <polybase.recursive.traversal> attribútumot "false" értékre a core-site.xml konfigurációs fájlban. Ez a fájl az SQL Server <SqlBinRoot>\PolyBase\Hadoop\Conf gyökerének bin alatt található. Például C:\Program Files\Microsoft SQL Server\MSSQL13.XD14\MSSQL\Binn.

DATA_SOURCE = external_data_source_name

Megadja annak a külső adatforrásnak a nevét, amely a külső adatok helyét tartalmazza. Ez a hely egy Hadoop fájlrendszer (HDFS), egy Azure Blob Storage-tároló vagy az Azure Data Lake Store. Külső adatforrás létrehozásához használja a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA) parancsot.

FILE_FORMAT = external_file_format_name

Megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatok fájltípusát és tömörítési módját tárolja. Külső fájlformátum létrehozásához használja CREATE EXTERNAL FILE FORMAT.

A külső fájlformátumokat több hasonló külső fájl is újra felhasználhatja.

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

Ez a beállítás csak olyan külső adatforrásokkal használható, ahol TYPE = HADOOP.

Megadhatja azokat az elutasítási paramétereket, amelyek meghatározzák, hogy a PolyBase hogyan kezeli a külső adatforrásból lekért piszkos rekordokat. Az adatrekordok akkor minősülnek "piszkosnak", ha a tényleges adattípusok vagy az oszlopok száma nem egyezik a külső tábla oszlopdefinícióival.

Ha nem ad meg vagy módosít elutasító értékeket, a PolyBase alapértelmezett értékeket használ. Az elutasítási paraméterekkel kapcsolatos információk további metaadatokként lesznek tárolva, amikor utasítással rendelkező CREATE EXTERNAL TABLE külső táblát hoz létre. Amikor egy jövőbeli SELECT utasítás vagy SELECT INTO SELECT utasítás adatokat választ ki a külső táblából, a PolyBase az elutasítási beállításokkal határozza meg azoknak a soroknak a számát vagy százalékát, amelyeket a tényleges lekérdezés meghiúsulása előtt el lehet utasítani. A lekérdezés (részleges) eredményeket ad vissza, amíg meg nem lépi az elutasítási küszöbértéket. Ezután a megfelelő hibaüzenettel meghiúsul.

REJECT_TYPE = { érték | százalék }

Tisztázza, hogy a REJECT_VALUE beállítás konstans értékként vagy százalékként van-e megadva.

  • érték

    REJECT_VALUE egy literális érték, nem százalék. A lekérdezés meghiúsul, ha az elutasított sorok száma meghaladja a reject_value.

    Ha és, REJECT_VALUE = 5REJECT_TYPE = valuea SELECT lekérdezés például öt sor elutasítása után meghiúsul.

  • százalékos

    REJECT_VALUE százalékos érték, nem pedig literális érték. A lekérdezés akkor hiúsul meg, 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.

REJECT_VALUE = reject_value

Megadja a lekérdezés sikertelensége előtt elutasítható sorok értékét vagy százalékos arányát.

A REJECT_TYPE = valuereject_value 0 és 2 147 483 647 közötti egész számnak kell lennie.

A REJECT_TYPE = percentagereject_value 0 és 100 közötti lebegőpontosnak kell lennie.

REJECT_SAMPLE_VALUE = reject_sample_value

Ez az attribútum megadása kötelező.REJECT_TYPE = percentage Meghatározza, hogy hány sort kíséreljen meg lekérni, mielőtt a PolyBase újraszámítja az elutasított sorok százalékos arányát.

A reject_sample_value paraméternek 0 és 2 147 483 647 közötti egész számnak kell lennie.

Ha például REJECT_SAMPLE_VALUE = 1000a PolyBase 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, a PolyBase további 1000 sort kísérel meg lekérni. A sikertelen sorok százalékos arányát továbbra is újraszámolja, miután minden további 1000 sort megpróbál importálni.

Jegyzet

Mivel a PolyBase 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 reject_value.

Example

Ez a példa bemutatja, hogyan működnek együtt a három REJECT lehetőség. Például, ha REJECT_TYPE = percentage, REJECT_VALUE = 30és REJECT_SAMPLE_VALUE = 100, a következő forgatókönyv fordulhat elő:

  • A PolyBase megpróbálja lekérni az első 100 sort; 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. Ennek eredményeként a PolyBase továbbra is beolvassa az adatokat a külső adatforrásból.
  • A PolyBase megkísérli betölteni a következő 100 sort; ezúttal 25 sor sikeres és 75 sor meghiúsul.
  • 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 PolyBase-lekérdezés 50% elutasított sortal meghiúsul, miután megkísérelte visszaadni az első 200 sort. Az egyező sorokat a rendszer még azelőtt adja vissza, hogy a PolyBase-lekérdezés észleli az elutasítási küszöbérték túllépésének észlelését.

REJECTED_ROW_LOCATION = könyvtár helye

A következőkre vonatkozik: AZ SQL Server 2019 (15.x) CU 6-os és újabb verziói és az Azure Synapse Analytics.

Megadja a külső adatforrás azon könyvtárát, amelybe az elutasított sorokat és a megfelelő hibafájlt meg kell írni.

Ha a megadott elérési út nem létezik, a PolyBase létrehoz egyet az Ön nevében. A rendszer létrehoz egy gyermekkönyvtárat _rejectedrowsnéven. A _ karakter biztosítja, hogy a könyvtár más adatfeldolgozás céljából ne legyen elérhető, kivéve, ha a helyparaméter kifejezetten el van nevezve. Ebben a könyvtárban létrejön egy mappa a betöltési idő alapján YearMonthDay -HourMinuteSecond formátumban (például 20230330-173205). Ebben a mappában kétféle fájltípus van megírva, a _reason fájl és az adatfájl. Ez a beállítás csak olyan külső adatforrásokhoz használható, ahol TYPE = HADOOP és külső táblákhoz DELIMITEDTEXTFORMAT_TYPE. További információ: CREATE EXTERNAL DATA SOURCE and CREATE EXTERNAL FILE FORMAT.

Annak oka, hogy a fájlok és az adatfájlok is rendelkeznek a CTAS-utasításhoz társított queryID. Mivel az adatok és az ok külön fájlokban találhatók, a megfelelő fájloknak egyező utótagjuk van.

Engedélyek

A következő felhasználói engedélyek szükségesek:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT (csak a Hadoopra és az Azure Storage-ra vonatkozik külső adatforrásokra)
  • CONTROL DATABASE (csak a Hadoopra és az Azure Storage-ra vonatkozik külső adatforrásokra)

Vegye figyelembe, hogy a DATABASE SCOPED CREDENTIAL parancsban CREATE EXTERNAL TABLE használt távoli bejelentkezésnek olvasási engedéllyel kell rendelkeznie a paraméterben megadott külső adatforrás elérési útjára/táblájára/gyűjteményére LOCATION vonatkozóan. Ha ezzel EXTERNAL TABLE szeretné exportálni az adatokat egy Hadoop- vagy Azure Storage-külső adatforrásba, akkor a megadott bejelentkezésnek írási engedéllyel kell rendelkeznie a megadott LOCATIONelérési úton. A Hadoop nem támogatott az SQL Server 2022 -ben (16.x).

Az Azure Blob Storage esetében az Azure Portalon, az Azure Blob Storage- vagy ADLS Gen2-tárfiókokban a hozzáférési kulcsok és a közös hozzáférésű jogosultságkód (SAS) konfigurálásakor konfigurálja az Engedélyezett engedélyeket, adjon meg legalább Olvasási és Írási engedélyeket. listaengedélyre is szükség lehet a mappák közötti kereséshez. Az engedélyezett erőforrástípusok között tároló és objektum is ki kell jelölnie.

Fontos

Az ALTER ANY EXTERNAL DATA SOURCE engedély lehetővé teszi bármely tag számára, hogy bármilyen külső adatforrás-objektumot hozzon létre és módosítson, ezért lehetővé teszi az adatbázis hatókörébe tartozó hitelesítő adatok elérését is az adatbázisban. Ezt az engedélyt kiemelt jogosultságúnak kell tekinteni, ezért csak megbízható rendszerbiztonsági tagoknak adható.

Hibakezelés

A CREATE EXTERNAL TABLE utasítás végrehajtása során a PolyBase megpróbál csatlakozni a külső adatforráshoz. Ha a kapcsolódási kísérlet meghiúsul, az utasítás meghiúsul, és a külső tábla nem jön létre. Egy vagy több percig is eltarthat, amíg a parancs meghibásodik, mivel a PolyBase újrapróbálkozza a kapcsolatot, mielőtt végül meghiúsul a lekérdezés.

Megjegyzések

Alkalmi lekérdezési forgatókönyvekben, például SELECT FROM EXTERNAL TABLEa PolyBase egy ideiglenes táblában tárolja a külső adatforrásból lekért sorokat. A lekérdezés befejezése után a PolyBase eltávolítja és törli az ideiglenes táblát. A rendszer nem tárol állandó adatokat SQL-táblákban. Ezzel szemben az importálási forgatókönyvben, például SELECT INTO FROM EXTERNAL TABLEa PolyBase a külső adatforrásból lekért sorokat állandó adatként tárolja az SQL-táblában. Az új tábla a lekérdezés végrehajtása során jön létre, amikor a PolyBase lekéri a külső adatokat.

A Hadoop formátumot csak az SQL Server 2016 (13.x), az SQL Server 2017 (14.x) és az SQL Server 2019 (15.x) támogatja.

A PolyBase a lekérdezési számítások egy részét leküldi a Hadoopba a lekérdezési teljesítmény javítása érdekében. Ezt a műveletet predikátum leküldéses leküldésnek nevezzük. Ennek engedélyezéséhez adja meg a Hadoop erőforrás-kezelő helybeállítását KÜLSŐ ADATFORRÁS LÉTREHOZÁSA.

Számos olyan külső táblát hozhat létre, amelyek ugyanarra vagy különböző külső adatforrásokra hivatkoznak.

Korlátozások

Mivel egy külső tábla adatai nem tartoznak az SQL Server közvetlen felügyelete alá, külső folyamat bármikor módosíthatja vagy eltávolíthatja őket. Ennek eredményeképpen a külső táblák lekérdezési eredményei nem garantáltan determinisztikusak. Ugyanez a lekérdezés különböző eredményeket adhat vissza minden alkalommal, amikor egy külső táblán fut. Hasonlóképpen előfordulhat, hogy egy lekérdezés meghiúsul, ha a külső adatokat áthelyezik vagy eltávolítják.

Több külső táblát is létrehozhat, amelyek mindegyike különböző külső adatforrásokra hivatkozik. Ha egyszerre futtat lekérdezéseket különböző Hadoop-adatforrásokkal, akkor minden Hadoop-forrásnak ugyanazt a "hadoop-kapcsolat" kiszolgálókonfigurációs beállítást kell használnia. Például nem futtathat egyszerre lekérdezést Egy Cloudera Hadoop-fürt és egy Hortonworks Hadoop-fürt között, mivel ezek különböző konfigurációs beállításokat használnak. A konfigurációs beállításokról és a támogatott kombinációkról lásd a PolyBase kapcsolati konfigurációját.

Ha a külső tábla DELIMITEDTEXT, CSV, PARQUETvagy DELTA használ adattípusként, a külső táblák csak CREATE STATISTICS parancsonként egy oszlop statisztikáit támogatják.

Külső táblákban csak ezek az adatdefiníciós nyelvi (DDL-) utasítások engedélyezettek:

  • CREATE TABLE és DROP TABLE
  • CREATE STATISTICS és DROP STATISTICS
  • CREATE VIEW és DROP VIEW

A szerkezetek és műveletek nem támogatottak:

  • Külső DEFAULT táblaoszlopokra vonatkozó korlátozás
  • Adatmanipulációs nyelv (DML) a törlési, beszúrási és frissítési műveletekhez

Lekérdezési korlátozások

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 ezer fájlt tartalmazó HDFS-mappákon futtathat PolyBase-lekérdezéseket. Javasoljuk, hogy tartsa rövidre a külső fájl elérési útját, és HDFS-mappánként legfeljebb 30 ezer fájlt használjon. Ha túl sok fájlra hivatkozik, előfordulhat, hogy a Java virtuális gép (JVM) memóriakimaradást tapasztal.

Táblázatszélesség korlátozásai

Az SQL Server 2016-ban (13.x) a PolyBase sorszélesség-korlátja 32 KB egy érvényes sor tábladefiníciónkénti maximális mérete alapján. Ha az oszlopséma összege nagyobb, mint 32 KB, a PolyBase nem tudja lekérdezni az adatokat.

Adattípus korlátozásai

A következő adattípusok nem használhatók külső PolyBase-táblákban:

  • földrajzi
  • geometriai
  • hierarchiaazonosító
  • kép
  • szöveg
  • kontextus
  • xml
  • Bármely felhasználó által definiált típus

Az adatforrásokra vonatkozó korlátozások

Jóslat

Az Oracle szinonimái nem támogatottak a PolyBase használata esetén.

Tömböket tartalmazó mongoDB-gyűjtemények külső táblái

A sp_data_source_objects segítségével észlelhető a tömböket tartalmazó MongoDB-gyűjtemények gyűjteményséma (oszlopai), és manuálisan hozhatja létre a külső táblát. A sp_data_source_table_columns tárolt eljárás automatikusan elvégzi az összesimítást a MongoDB-illesztőHöz készült PolyBase ODBC-illesztőprogramon keresztül.

Zár

Megosztott zárolás az SCHEMARESOLUTION objektumon.

Biztonság

A külső táblák adatfájljait a Hadoop vagy az Azure Blob Storage tárolja. Ezeket az adatfájlokat a saját folyamatai hozzák létre és kezelik. A külső adatok biztonságának kezelése az Ön feladata.

Példák

Egy. Külső táblázat létrehozása szöveghatárolt formátumban lévő adatokkal

Ez a példa egy szöveghatárolt fájlokban formázott adatokat tartalmazó külső tábla létrehozásához szükséges összes lépést mutatja be. Meghatározza a külső adatforrás mydatasource és egy külső fájlformátumot myfileformat. Ezekre az adatbázisszintű objektumokra a CREATE EXTERNAL TABLE utasítás hivatkozik. További információ: CREATE EXTERNAL DATA SOURCE and CREATE EXTERNAL FILE FORMAT.

CREATE EXTERNAL DATA SOURCE mydatasource
WITH (
    TYPE = HADOOP,
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO

CREATE EXTERNAL FILE FORMAT myfileformat
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (FIELD_TERMINATOR = '|')
);
GO

CREATE EXTERNAL TABLE ClickStream
(
    url VARCHAR (50),
    event_date DATE,
    user_IP VARCHAR (50)
)
WITH (
    DATA_SOURCE = mydatasource,
    LOCATION = '/webdata/employee.tbl',
    FILE_FORMAT = myfileformat
);

B. Külső tábla létrehozása RCFile formátumú adatokkal

Ez a példa egy RCFiles formátumú adatokat tartalmazó külső tábla létrehozásához szükséges összes lépést mutatja be. Meghatározza a külső adatforrás mydatasource_rc és egy külső fájlformátumot myfileformat_rc. Ezekre az adatbázisszintű objektumokra a CREATE EXTERNAL TABLE utasítás hivatkozik. További információ: CREATE EXTERNAL DATA SOURCE and CREATE EXTERNAL FILE FORMAT.

CREATE EXTERNAL DATA SOURCE mydatasource_rc
WITH (
    TYPE = HADOOP,
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO

CREATE EXTERNAL FILE FORMAT myfileformat_rc
WITH (
    FORMAT_TYPE = RCFILE,
    SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
);
GO

CREATE EXTERNAL TABLE ClickStream_rc
(
    url VARCHAR (50),
    event_date DATE,
    user_ip VARCHAR (50)
)
WITH (
    DATA_SOURCE = mydatasource_rc,
    LOCATION = '/webdata/employee_rc.tbl',
    FILE_FORMAT = myfileformat_rc
);

C. Külső táblázat létrehozása ORC formátumú adatokkal

Ez a példa egy ORC-fájlként formázott adatokat tartalmazó külső tábla létrehozásához szükséges összes lépést mutatja be. Meghatározza a külső adatforrás mydatasource_orc és egy külső fájlformátumot myfileformat_orc. Ezekre az adatbázisszintű objektumokra a CREATE EXTERNAL TABLE utasítás hivatkozik. További információ: CREATE EXTERNAL DATA SOURCE and CREATE EXTERNAL FILE FORMAT.

CREATE EXTERNAL DATA SOURCE mydatasource_orc
WITH (
    TYPE = HADOOP,
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO

CREATE EXTERNAL FILE FORMAT myfileformat_orc
WITH (
    FORMAT = ORC,
    COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL TABLE ClickStream_orc (
    url VARCHAR (50),
    event_date DATE,
    user_ip VARCHAR (50)
)
WITH (
    LOCATION='/webdata/',
    DATA_SOURCE = mydatasource_orc,
    FILE_FORMAT = myfileformat_orc
);

D. Hadoop-adatok lekérdezése

ClickStream egy külső tábla, amely egy Hadoop-fürt employee.tbl tagolt szövegfájlhoz csatlakozik. Az alábbi lekérdezés ugyanúgy néz ki, mint egy standard táblán lévő lekérdezés. Ez a lekérdezés azonban lekéri az adatokat a Hadoopból, majd kiszámítja az eredményeket.

SELECT TOP 10 (url)
FROM ClickStream
WHERE user_ip = 'xxx.xxx.xxx.xxx';

E. Hadoop-adatok csatlakoztatása SQL-adatokkal

Ez a lekérdezés úgy néz ki, mint egy szabványos JOIN két SQL-táblán. A különbség az, hogy a PolyBase lekéri a kattintásfolyam adatait a Hadoopból, majd csatlakoztatja azokat a UrlDescription táblához. Az egyik tábla egy külső tábla, a másik pedig egy szabványos SQL-tábla.

SELECT url.description
FROM ClickStream AS cs
     INNER JOIN UrlDescription AS url
         ON cs.url = url.name
WHERE cs.url = 'msdn.microsoft.com';

F. Adatok importálása a Hadoopból EGY SQL-táblába

Ez a példa létrehoz egy új SQL-táblát ms_user, amely véglegesen tárolja a standard SQL-tábla user és a külső tábla ClickStreamközötti illesztés eredményét.

SELECT DISTINCT user.FirstName, user.LastName
INTO ms_user
FROM user INNER JOIN (
    SELECT * FROM ClickStream WHERE cs.url = 'www.microsoft.com'
) AS ms
ON user.user_ip = ms.user_ip;

G. Külső tábla létrehozása az SQL Serverhez

Az adatbázis hatókörébe tartozó hitelesítő adatok létrehozása előtt a felhasználói adatbázisnak rendelkeznie kell egy fő kulccsal a hitelesítő adatok védelméhez. További információ: CREATE MASTER KEY and CREATE DATABASE SCOPED CREDENTIAL.

-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

/*  specify credentials to external data source
 *  IDENTITY: user name for external source.
 *  SECRET: password for external source.
 */
CREATE DATABASE SCOPED CREDENTIAL SqlServerCredentials
WITH
    IDENTITY = '<username>',
    SECRET = '<password>';

Hozzon létre egy SQLServerInstancenevű új külső adatforrást és sqlserver.customernevű külső táblát:

/* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
*  PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
*  CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE SQLServerInstance
WITH (
LOCATION = 'sqlserver://SqlServer',
    -- PUSHDOWN = ON | OFF,
    CREDENTIAL = SQLServerCredentials
);
GO

CREATE SCHEMA sqlserver;

/* LOCATION: sql server table/view in 'database_name.schema_name.object_name' format
*  DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE sqlserver.customer (
    C_CUSTKEY INT NOT NULL,
    C_NAME VARCHAR(25) NOT NULL,
    C_ADDRESS VARCHAR(40) NOT NULL,
    C_NATIONKEY INT NOT NULL,
    C_PHONE CHAR(15) NOT NULL,
    C_ACCTBAL DECIMAL(15,2) NOT NULL,
    C_MKTSEGMENT CHAR(10) NOT NULL,
    C_COMMENT VARCHAR(117) NOT NULL
)
WITH (
    LOCATION='tpch_10.dbo.customer',
    DATA_SOURCE=SqlServerInstance
);

Én. Külső tábla létrehozása az Oracle számára

-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH
    IDENTITY = '<username>',
    SECRET = '<password>';
GO

/*
* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = 'oracle://<server address>[:<port>]',
    -- PUSHDOWN = ON | OFF,CREDENTIAL = credential_name
);

/*
* LOCATION: Oracle table/view in '<database_name>.<schema_name>.<object_name>' format. This may be case sensitive in the Oracle database.
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customers
(
    [O_ORDERKEY] DECIMAL (38) NOT NULL,
    [O_CUSTKEY] DECIMAL (38) NOT NULL,
    [O_ORDERSTATUS] CHAR COLLATE Latin1_General_BIN NOT NULL,
    [O_TOTALPRICE] DECIMAL (15, 2) NOT NULL,
    [O_ORDERDATE] DATETIME2 (0) NOT NULL,
    [O_ORDERPRIORITY] CHAR (15) COLLATE Latin1_General_BIN NOT NULL,
    [O_CLERK] CHAR (15) COLLATE Latin1_General_BIN NOT NULL,
    [O_SHIPPRIORITY] DECIMAL (38) NOT NULL,
    [O_COMMENT] VARCHAR (79) COLLATE Latin1_General_BIN NOT NULL
)
WITH (
    DATA_SOURCE = external_data_source_name,
    LOCATION = 'DB1.mySchema.customer'
);

J. Külső tábla létrehozása a Teradata számára

-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH
    IDENTITY = '<username>',
    SECRET = '<password>';
GO

/* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = teradata://<server address>[:<port>],
    -- PUSHDOWN = ON | OFF,
    CREDENTIAL =credential_name
);
GO

/* LOCATION: Teradata table/view in '<database_name>.<object_name>' format
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customer(
    L_ORDERKEY INT NOT NULL,
    L_PARTKEY INT NOT NULL,
    L_SUPPKEY INT NOT NULL,
    L_LINENUMBER INT NOT NULL,
    L_QUANTITY DECIMAL(15,2) NOT NULL,
    L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
    L_DISCOUNT DECIMAL(15,2) NOT NULL,
    L_TAX DECIMAL(15,2) NOT NULL,
    L_RETURNFLAG CHAR NOT NULL,
    L_LINESTATUS CHAR NOT NULL,
    L_SHIPDATE DATE NOT NULL,
    L_COMMITDATE DATE NOT NULL,
    L_RECEIPTDATE DATE NOT NULL,
    L_SHIPINSTRUCT CHAR(25) NOT NULL,
    L_SHIPMODE CHAR(10) NOT NULL,
    L_COMMENT VARCHAR(44) NOT NULL
)
WITH (
    LOCATION='customer',
    DATA_SOURCE= external_data_source_name
);

K. Külső tábla létrehozása a MongoDB-hez

-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH
    IDENTITY = '<username>',
    SECRET = '<password>';
GO

/* LOCATION: Location string should be of format '<type>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = mongodb://<server>[:<port>],
    -- PUSHDOWN = ON | OFF,
    CREDENTIAL = credential_name
);

/* LOCATION: MongoDB table/view in '<database_name>.<schema_name>.<object_name>' format
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customers(
    [O_ORDERKEY] DECIMAL(38) NOT NULL,
    [O_CUSTKEY] DECIMAL(38) NOT NULL,
    [O_ORDERSTATUS] CHAR COLLATE Latin1_General_BIN NOT NULL,
    [O_TOTALPRICE] DECIMAL(15,2) NOT NULL,
    [O_ORDERDATE] DATETIME2(0) NOT NULL,
    [O_COMMENT] VARCHAR(79) COLLATE Latin1_General_BIN NOT NULL
)
WITH (
    LOCATION='customer',
    DATA_SOURCE= external_data_source_name
);

L. S3-kompatibilis objektumtároló lekérdezése külső táblán keresztül

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

Az alábbi példa bemutatja, hogy a T-SQL használatával lekérdezhető egy S3-kompatibilis objektumtárolóban tárolt parquet fájl külső tábla lekérdezésével. A minta egy relatív elérési utat használ a külső adatforráson belül.

CREATE EXTERNAL DATA SOURCE s3_ds
WITH
(   LOCATION = 's3://<ip_address>:<port>/',
    CREDENTIAL = s3_dc
);
GO

CREATE EXTERNAL FILE FORMAT ParquetFileFormat
WITH(
    FORMAT_TYPE = PARQUET
);
GO

CREATE EXTERNAL TABLE Region (
    r_regionkey BIGINT,
    r_name CHAR(25),
    r_comment VARCHAR(152)
)
WITH (
    LOCATION = '/region/',
    DATA_SOURCE = 's3_ds',
    FILE_FORMAT = ParquetFileFormat
);

* Azure SQL Database *  

felügyelt Azure SQL-példány

 

Áttekintés: Azure SQL Database

Létrehoz egy külső táblát, amely a következő célokra használható:

Lásd még: KÜLSŐ ADATFORRÁS LÉTREHOZÁSA.

Szintaxis

Adatvirtualizáláshoz (előzetes verzió)

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'filepath' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

Rugalmas lekérdezésekhez (előzetes verzió):

-- Create a table for use with elastic query
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH ( <sharded_external_table_options> )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<sharded_external_table_options> ::=
        DATA_SOURCE = external_data_source_name ,
        SCHEMA_NAME = N'nonescaped_schema_name' ,
        OBJECT_NAME = N'nonescaped_object_name' ,
        [ DISTRIBUTION  = SHARDED(sharding_column_name) | REPLICATED | ROUND_ROBIN ] ]
    )
[ ; ]

Érvek

{ database_name.schema_name.table_name | schema_name.table_name | table_name}

A létrehozandó tábla egy-háromrészes neve.

Külső táblák esetében az SQL csak a tábla metaadatait tárolja, valamint az Azure SQL Database-ben hivatkozott fájlra vagy mappára vonatkozó alapvető statisztikákat. Külső táblák létrehozásakor a rendszer nem helyez át vagy tárol tényleges adatokat az Azure SQL Database-ben.

Fontos

A legjobb teljesítmény érdekében, ha a külső adatforrás-illesztőprogram támogatja a háromrészes nevet, meg kell adnia a háromrészes nevet.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE támogatja az oszlopnév, az adattípus, a nullhihetőség és a rendezés konfigurálását. Külső táblákon nem használható DEFAULT CONSTRAINT . Ezek az adattípusok nem támogatottak az Azure SQL Database külső tábláiban lévő oszlopok esetében:

  • földrajzi
  • geometriai
  • hierarchiaazonosító
  • kép
  • szöveg
  • kontextus
  • xml
  • json
  • Bármely felhasználó által definiált típus

Az oszlopdefinícióknak, beleértve az adattípusokat és az oszlopok számát, meg kell egyeznie a külső fájlok adataival. Ha eltérés van, a fájlsorokat a rendszer elutasítja a tényleges adatok lekérdezésekor.

Horizontális külső táblabeállítások

Megadja a külső adatforrást (nem SQL Server-adatforrást) és a rugalmas lekérdezésiterjesztési módszerét.

LOCATION = "folder_or_filepath"

Megadja az Azure Data Lake Gen2 vagy az Azure Blob Storage tényleges adatainak mappáit vagy fájlelérési útját és fájlnevét. A hely a gyökérmappából indul ki. A gyökérmappa a külső adatforrásban megadott adathely. CREATE EXTERNAL TABLE nem hozza létre az elérési utat és a mappát.

Ha mappaként adja meg a beállítást LOCATION , a külső táblából kiválasztott lekérdezés lekéri a fájlokat a mappából, de nem az összes almappájából.

A felügyelt Azure SQL-példány nem talál fájlokat almappákban vagy rejtett mappákban. Nem ad vissza olyan fájlokat sem, amelyeknek a neve aláhúzással () vagy ponttal (_.) kezdődik.

Az alábbi példaképben, ha LOCATION='/webdata/', a lekérdezés sorokat mydata.txtad vissza. Nem tér vissza mydata2.txt , mert egy almappában van, nem tér vissza mydata3.txt , mert rejtett mappában van, és nem tér vissza _hidden.txt , mert rejtett fájl.

Külső táblák mappáinak és fájladatainak diagramja.

ADAT_FORRÁS

DATA_SOURCE a külső adatok helyét tartalmazó külső adatforrás nevét adja meg. Külső adatforrás létrehozásához használja a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA) parancsot. Például a rugalmas lekérdezésben DATA_SOURCE a szegmenstérkép, lásd : Külső táblák létrehozása.

FILE_FORMAT = external_file_format_name

Megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatok fájltípusát és tömörítési módját tárolja. Külső fájlformátum létrehozásához használja CREATE EXTERNAL FILE FORMAT.

SCHEMA_NAME és OBJECT_NAME

Csak rugalmas lekérdezéssel használható.

A SCHEMA_NAME külső tábladefiníció és OBJECT_NAME -záradékok egy másik sémában lévő táblára képezik le a külső tábladefiníciót. Ha nincs megadva, a távoli objektum sémája feltételezve van dbo, és a rendszer feltételezi, hogy a neve megegyezik a definiált külső tábla nevével. Ez akkor hasznos, ha a távoli tábla neve már szerepel abban az adatbázisban, ahol létre szeretné hozni a külső táblát. Például egy külső táblát szeretne definiálni a katalógusnézetek vagy DMV-k összesített nézetének lekéréséhez a kibővített adatszinten. Mivel a katalógusnézetek és a DMV-k már léteznek helyileg, nem használhatja a nevüket a külső tábladefinícióhoz. Ehelyett használjon másik nevet, és használja a katalógusnézet vagy a DMV nevét a és/vagy OBJECT_NAME záradékokbanSCHEMA_NAME. Példa: Külső táblák létrehozása.

ELOSZTÁS

Csak rugalmas lekérdezéssel használható.

Szabadon választható. Ez az argumentum csak a típusú SHARD_MAP_MANAGERadatbázisokhoz szükséges. Ez az argumentum azt szabályozza, hogy a rendszer egy táblát szilánkos vagy replikált táblaként kezeljen-e. A SHARDED (<column name>) táblákban a különböző táblák adatai nem fedik egymást. REPLICATED azt határozza meg, hogy a táblák minden szegmensen ugyanazokat az adatokat tartalmazzák. ROUND_ROBIN azt jelzi, hogy az adatok elosztásához egy alkalmazásspecifikus metódust használnak.

A DISTRIBUTION záradék a táblához használt adateloszlást határozza meg. A lekérdezésfeldolgozó a záradékban DISTRIBUTION megadott információkat használja a leghatékonyabb lekérdezési tervek létrehozásához.

  • SHARDED azt jelenti, hogy az adatok horizontálisan particionálva lesznek az adatbázisok között. Az adatterjesztés particionálási kulcsa a sharding_column_name paraméter.
  • REPLICATED azt jelenti, hogy a tábla azonos példányai találhatók az egyes adatbázisokban. Az Ön felelőssége, hogy a replikák azonosak legyenek az adatbázisokban.
  • ROUND_ROBIN azt jelenti, hogy a tábla horizontálisan particionálva van egy alkalmazásfüggő terjesztési módszerrel.

Engedélyek

A külső táblához hozzáféréssel rendelkező felhasználók automatikusan hozzáférnek az alapul szolgáló távoli táblákhoz a külső adatforrás definíciójában megadott hitelesítő adatok alapján. Kerülje a jogosultságok nem kívánt megemelését a külső adatforrás hitelesítő adataival. Külső táblát használjon GRANT vagy REVOKE használjon úgy, mintha normál táblázat lenne. Miután definiálta a külső adatforrást és a külső táblákat, mostantól teljes T-SQL-t használhat a külső táblákon.

CREATE EXTERNAL TABLE a következő felhasználói engedélyeket igényli:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE csak a főkulcs, az adatbázis hatókörébe tartozó hitelesítő adatok és külső adatforrás létrehozásához van szükség engedélyekre.

Vegye figyelembe, hogy a külső adatforrást létrehozó bejelentkezésnek engedéllyel kell rendelkeznie a Hadoopban vagy az Azure Blob Storage-ban található külső adatforrás olvasásához és írásához.

Fontos

Az ALTER ANY EXTERNAL DATA SOURCE engedély lehetővé teszi bármely tag számára, hogy bármilyen külső adatforrás-objektumot hozzon létre és módosítson, ezért lehetővé teszi az adatbázis hatókörébe tartozó hitelesítő adatok elérését is az adatbázisban. Ezt az engedélyt kiemelt jogosultságúnak kell tekinteni, ezért csak megbízható rendszerbiztonsági tagoknak adható.

Zár

Megosztott zárolás az SCHEMARESOLUTION objektumon.

Megjegyzések

Alkalmi lekérdezési forgatókönyvekben, például SELECT FROM EXTERNAL TABLEa külső adatforrásból lekért sorok egy ideiglenes táblában vannak tárolva. A lekérdezés befejezése után a rendszer eltávolítja a sorokat, és törli az ideiglenes táblát. A rendszer nem tárol állandó adatokat SQL-táblákban.

Ezzel szemben az importálási forgatókönyvben, például SELECT INTO FROM EXTERNAL TABLEa külső adatforrásból lekért sorok állandó adatokként vannak tárolva az SQL-táblában. Az új tábla a külső adatok lekérésekor jön létre a lekérdezés végrehajtása során.

Az Azure SQL Database-sel való adatvirtualizálás jelenleg csak olvasható.

Számos olyan külső táblát hozhat létre, amelyek ugyanarra vagy különböző külső adatforrásokra hivatkoznak.

Táblázatszélesség korlátozásai

Az 1 MB-os sorszélesség-korlát egy érvényes sor tábladefiníció szerinti maximális méretén alapul. Ha az oszlopséma összege nagyobb, mint 1 MB, az adatvirtualizálási lekérdezések sikertelenek.

Hibakezelés

Az utasítás végrehajtása CREATE EXTERNAL TABLE közben, ha a kapcsolódási kísérlet meghiúsul, az utasítás meghiúsul, és a külső tábla nem jön létre. Egy vagy több percig is eltarthat, amíg a parancs meghibásodik, mivel az SQL Database újrapróbálkozza a kapcsolatot, mielőtt végül meghiúsul a lekérdezés.

Korlátozások

Mivel egy külső tábla adatai nem tartoznak az adatbázismotor vagy az Azure SQL Database közvetlen felügyelete alá, külső folyamattal bármikor módosíthatók vagy eltávolíthatók. Ennek eredményeképpen a külső táblák lekérdezési eredményei nem garantáltan determinisztikusak. Ugyanez a lekérdezés különböző eredményeket adhat vissza minden alkalommal, amikor egy külső táblán fut. Hasonlóképpen előfordulhat, hogy egy lekérdezés meghiúsul, ha a külső adatokat áthelyezik vagy eltávolítják.

Több külső táblát is létrehozhat, amelyek mindegyike különböző külső adatforrásokra hivatkozik.

Külső táblákban csak ezek az adatdefiníciós nyelvi (DDL-) utasítások engedélyezettek:

  • CREATE TABLE és DROP TABLE
  • CREATE STATISTICS és DROP STATISTICS
  • CREATE VIEW és DROP VIEW

A szerkezetek és műveletek nem támogatottak:

  • A DEFAULT külső táblaoszlopokra vonatkozó korlátozás.
  • A törlés, beszúrás és frissítés adatmanipulációs nyelv (DML) műveletei.

Korlátozások rugalmas lekérdezéssel

  • Elkülönítés szemantikája: Az adatok külső táblán keresztüli elérése nem felel meg az SQL Server elkülönítési szemantikájának. Ez azt jelenti, hogy egy külső tábla lekérdezése nem jár zárolással vagy pillanatkép-elkülönítéssel. Ezért az adatvisszaszolgáltatás változhat, ha a külső adatforrás adatai módosulnak. Ugyanez a lekérdezés különböző eredményeket adhat vissza minden alkalommal, amikor egy külső táblán fut. Hasonlóképpen előfordulhat, hogy egy lekérdezés meghiúsul, ha a külső adatokat áthelyezik vagy eltávolítják.

  • Szerkezetek és műveletek nem támogatottak:

    • A DEFAULT külső táblaoszlopokra vonatkozó korlátozás.
    • A törlés, beszúrás és frissítés adatmanipulációs nyelv (DML) műveletei.
    • Dinamikus adatmaszkolás külső táblaoszlopokon.
    • A kurzorok nem támogatottak külső táblákhoz az Azure SQL Database-ben.
  • Csak a konstans predikátumok: Csak a lekérdezésben definiált konstans predikátumok küldhetők le a külső adatforrásba. Ez ellentétben áll a csatolt kiszolgálókkal, és a lekérdezés végrehajtása során meghatározott predikátumokhoz való hozzáféréshez, vagyis ha beágyazott hurokkal használják a lekérdezéstervben. Ez gyakran a teljes külső táblázat helyi másolásához, majd csatlakoztatásához vezet.

    Az alábbi példában, ha External.Orders egy külső tábla, és Customer egy helyi tábla, a lekérdezés a teljes külső táblát helyileg másolja, mert a szükséges predikátum fordításkor nem ismert.

    SELECT Orders.OrderId, Orders.OrderTotal
    FROM External.Orders
    WHERE CustomerId IN (
        SELECT TOP 1 CustomerId
        FROM Customer
        WHERE CustomerName = 'MyCompany'
    );
    
  • Nincs párhuzamosság: A külső táblák használata megakadályozza a párhuzamosság használatát a lekérdezési tervben.

  • Távoli lekérdezésként: A külső táblák távoli lekérdezésként vannak implementálva, így a visszaadott sorok becsült száma általában 1000. A külső tábla szűréséhez használt predikátum típusán alapuló egyéb szabályok is léteznek. Ezek szabályokon alapuló becslések, nem pedig a külső tábla tényleges adatain alapuló becslések. Az optimalizáló nem fér hozzá a távoli adatforráshoz, hogy pontosabb becslést kapjon.

  • Privát végpont esetén nem támogatott: A külső táblalekérdezések nem támogatottak, ha a távoli táblához való csatlakozás privát végpont.

Példák

További példákért tekintse meg a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA ) vagy az Adatvirtualizálás az Azure SQL Database-lel című témakört.

Egy. Külső tábla létrehozása rugalmas lekérdezéshez

CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
(
    [CustomerID] INT NOT NULL,
    [CustomerName] VARCHAR (50) NOT NULL,
    [Company] VARCHAR (50) NOT NULL
)
WITH (
    DATA_SOURCE = MyElasticDBQueryDataSrc
);

B. Külső tábla létrehozása szegmenses adatforráshoz

Ez a példa egy távoli DMV-t újraképz egy külső táblába a záradékok és OBJECT_NAME a SCHEMA_NAME záradékok használatával.

CREATE EXTERNAL TABLE [dbo].[all_dm_exec_requests]
(
    [session_id] SMALLINT NOT NULL,
    [request_id] INT NOT NULL,
    [start_time] DATETIME NOT NULL,
    [status] NVARCHAR (30) NOT NULL,
    [command] NVARCHAR (32) NOT NULL,
    [sql_handle] VARBINARY (64),
    [statement_start_offset] INT,
    [statement_end_offset] INT,
    [cpu_time] INT NOT NULL
)
WITH (
    DATA_SOURCE = MyExtSrc,
    SCHEMA_NAME = 'sys',
    OBJECT_NAME = 'dm_exec_requests',
    DISTRIBUTION = ROUND_ROBIN
);

C. Külső adatok lekérdezése az Azure SQL Database-ből külső táblával

  1. Ha adatbázis-hatókörű hitelesítő adatokat szeretne létrehozni az Azure SQL Database-ben, először létre kell hoznia az adatbázis főkulcsát, ha még nem létezik. Az adatbázis főkulcsára akkor van szükség, ha a hitelesítő adatok megkövetelik SECRET.

    -- Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  2. Hozza létre az adatbázis hatókörébe tartozó hitelesítő adatokat EGY SAS-jogkivonat használatával. Felügyelt identitást is használhat.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH
        IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<KEY>'; --Removing leading '?'
    
  3. Hozza létre a külső adatforrást a hitelesítő adatok használatával.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
        CREDENTIAL = [MyCredential]
    );
    
  4. Hozzon létre egy EXTERNAL FILE FORMAT és egy EXTERNAL TABLE, az adatok lekérdezéséhez, mintha egy helyi tábla volna.

    -- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE
    
    --Create external file format
    CREATE EXTERNAL FILE FORMAT DemoFileFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
    --Create external table:
    CREATE EXTERNAL TABLE tbl_TaxiRides
    (
        vendorID VARCHAR (100) COLLATE Latin1_General_BIN2,
        tpepPickupDateTime DATETIME2,
        tpepDropoffDateTime DATETIME2,
        passengerCount INT,
        tripDistance FLOAT,
        puLocationId VARCHAR (8000),
        doLocationId VARCHAR (8000),
        startLon FLOAT,
        startLat FLOAT,
        endLon FLOAT,
        endLat FLOAT,
        rateCodeId SMALLINT,
        storeAndFwdFlag VARCHAR (8000),
        paymentType VARCHAR (8000),
        fareAmount FLOAT,
        extra FLOAT,
        mtaTax FLOAT,
        improvementSurcharge VARCHAR (8000),
        tipAmount FLOAT,
        tollsAmount FLOAT,
        totalAmount FLOAT
    )
    WITH (
        DATA_SOURCE = NYCTaxiExternalDataSource,
        LOCATION = 'yellow/puYear = */puMonth = */*.parquet',
        FILE_FORMAT = MyFileFormat
    );
    
    --Then, query the data via an external table with T-SQL:
    SELECT TOP 10 *
    FROM tbl_TaxiRides;
    

felügyelt Azure SQL-példány

* Azure Synapse
Elemzés *
 

 

Áttekintés: Azure Synapse Analytics

Külső táblázat használata:

  • A dedikált SQL-készletek adatokat kérdezhetnek le, importálhatnak és tárolhatnak a Hadoopból, az Azure Blob Storage-ból, valamint az Azure Data Lake Storage Gen1-ből és Gen2-ből.
  • A kiszolgáló nélküli SQL-készletek adatokat kérdezhetnek le, importálhatnak és tárolhatnak az Azure Blob Storage-ból, valamint az Azure Data Lake Storage Gen1-ből és Gen2-ből. A kiszolgáló nélküli szolgáltatás nem támogatja TYPE=Hadoopa .

Lásd még: CREATE EXTERNAL DATA SOURCE and DROP EXTERNAL TABLE.

További információ és példák a külső táblák Azure Synapse-nal való használatáról: Külső táblák használata a Synapse SQL-sel.

Szintaxis

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ ,...n ] )
    WITH (
        LOCATION = 'hdfs_folder_or_filepath',
        DATA_SOURCE = external_data_source_name,
        FILE_FORMAT = external_file_format_name
        [ , <reject_options> [ ,...n ] ]
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<reject_options> ::=
{
    | REJECT_TYPE = { value | percentage },
    | REJECT_VALUE = reject_value,
    | REJECT_SAMPLE_VALUE = reject_sample_value,
    | REJECTED_ROW_LOCATION = '/REJECT_Directory'
}

Érvek

{ database_name.schema_name.table_name | schema_name.table_name | table_name}

A létrehozandó tábla egy-háromrészes neve.

Külső tábla esetén csak a tábla metaadatai és az Azure Data Lake, Hadoop vagy Azure Blob Storage szolgáltatásban hivatkozott fájl vagy mappa alapszintű statisztikái. Külső táblák létrehozásakor a rendszer nem helyez át vagy tárol tényleges adatokat.

Fontos

A legjobb teljesítmény érdekében, ha a külső adatforrás-illesztőprogram támogatja a háromrészes nevet, meg kell adnia a háromrészes nevet.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE támogatja az oszlopnév, az adattípus, a nullhihetőség és a rendezés konfigurálását. Külső táblákon nem használható DEFAULT CONSTRAINT .

Jegyzet

A szöveg, az ntext és az xml adattípusok nem támogatottak a Synapse Analytics külső tábláinak oszlopaihoz.

  • A tagolt fájlok olvasásakor az oszlopdefinícióknak, beleértve az adattípusokat és az oszlopok számát, meg kell egyeznie a külső fájlok adataival. Ha eltérés van, a fájlsorokat a rendszer elutasítja a tényleges adatok lekérdezésekor.
  • Parquet-fájlokból való olvasáskor csak az olvasni kívánt oszlopokat adhatja meg, a többit pedig kihagyhatja.

LOCATION = "folder_or_filepath"

Megadja az Azure Data Lake, a Hadoop vagy az Azure Blob Storage tényleges adataihoz tartozó mappát vagy fájl elérési útját és fájlnevét. A hely a gyökérmappából indul ki. A gyökérmappa a külső adatforrásban megadott adathely. A CREATE EXTERNAL TABLE AS SELECT (CETAS) utasítás létrehozza az elérési utat és a mappát, ha nem létezik. CREATE EXTERNAL TABLE nem hozza létre az elérési utat és a mappát.

Ha mappaként adja meg LOCATION , a külső táblából kiválasztott PolyBase-lekérdezés lekéri a fájlokat a mappából és annak összes almappájából. A Hadoophoz hasonlóan a PolyBase sem ad vissza rejtett mappákat. Nem ad vissza olyan fájlokat sem, amelyeknek a neve aláhúzással () vagy ponttal (_.) kezdődik.

A következő képen látható példában, ha LOCATION='/webdata/'egy PolyBase-lekérdezés sorokat ad vissza a következőtől mydata.txt : és mydata2.txt. Nem tér vissza mydata3.txt , mert egy rejtett mappa almappájában van, és nem tér vissza _hidden.txt , mert rejtett fájl.

Külső táblák mappáinak és fájladatainak diagramja.

A Hadoop külső tábláitól eltérően a natív külső táblák csak akkor adnak vissza almappákat, ha az elérési út végén /** ad meg. Ebben a példában, ha LOCATION='/webdata/'egy kiszolgáló nélküli SQL-készlet lekérdezése sorokat ad vissza.mydata.txt Nem tér vissza mydata2.txt , és mydata3.txt mert egy almappában találhatók. A Hadoop-táblák az almappákban lévő összes fájlt visszaadják.

A Hadoop és a natív külső táblák is kihagyják az aláhúzással () vagy ponttal (_.) kezdődő neveket tartalmazó fájlokat.

DATA_SOURCE = external_data_source_name

Megadja annak a külső adatforrásnak a nevét, amely a külső adatok helyét tartalmazza. Ez a hely az Azure Data Lake-ben található. Külső adatforrás létrehozásához használja a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA) parancsot.

FILE_FORMAT = external_file_format_name

Megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatok fájltípusát és tömörítési módját tárolja. Külső fájlformátum létrehozásához használja CREATE EXTERNAL FILE FORMAT.

Táblázat opciók

Megadja az alapul szolgáló fájlok olvasását leíró beállításokat. Jelenleg az egyetlen elérhető lehetőség, {"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}amely arra utasítja a külső táblát, hogy hagyja figyelmen kívül a mögöttes fájlokon végrehajtott frissítéseket, még akkor is, ha ez inkonzisztens olvasási műveleteket okozhat. Ezt a beállítást csak olyan speciális esetekben használja, ahol gyakran fűzött fájlokat. Ez a beállítás kiszolgáló nélküli SQL-készletben érhető el CSV formátumban.

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

Az elutasítási lehetőségek előzetes verzióban érhetők el a kiszolgáló nélküli SQL-készletekhez az Azure Synapse Analyticsben.

Ez a beállítás csak olyan külső adatforrásokkal használható, ahol TYPE = HADOOP.

Megadhatja azokat az elutasítási paramétereket, amelyek meghatározzák, hogy a PolyBase hogyan kezeli a külső adatforrásból lekért piszkos rekordokat. Az adatrekordok akkor minősülnek "piszkosnak", ha a tényleges adattípusok vagy az oszlopok száma nem egyezik a külső tábla oszlopdefinícióival.

Ha nem ad meg vagy módosít elutasító értékeket, a PolyBase alapértelmezett értékeket használ. Az elutasítási paraméterekkel kapcsolatos információk további metaadatokként lesznek tárolva, amikor utasítással rendelkező CREATE EXTERNAL TABLE külső táblát hoz létre. Amikor egy jövőbeli SELECT utasítás vagy SELECT INTO SELECT utasítás adatokat választ ki a külső táblából, a PolyBase az elutasítási beállításokkal határozza meg azoknak a soroknak a számát vagy százalékát, amelyeket a tényleges lekérdezés meghiúsulása előtt el lehet utasítani. A lekérdezés (részleges) eredményeket ad vissza, amíg meg nem lépi az elutasítási küszöbértéket. Ezután a megfelelő hibaüzenettel meghiúsul.

A PARSER_VERSION formátumbeállítás csak kiszolgáló nélküli SQL-készletekben támogatott.

REJECT_TYPE = { érték | százalék }

Tisztázza, hogy a REJECT_VALUE beállítás konstans értékként vagy százalékként van-e megadva.

  • érték

    REJECT_VALUE egy literális érték, nem százalék. A PolyBase-lekérdezés meghiúsul, ha az elutasított sorok száma meghaladja a reject_value.

    A lekérdezés meghiúsul, ha az elutasított sorok száma meghaladja a reject_value. Ha és például REJECT_VALUE = 5REJECT_TYPE = valuea PolyBase-lekérdezés SELECT öt sor elvetése után meghiúsul.

  • százalékos

    REJECT_VALUE százalékos érték, nem pedig literális érték. A PolyBase-lekérdezések akkor hiúsulnak meg, 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.

    • A REJECT_TYPE = valuereject_value 0 és 2 147 483 647 közötti egész számnak kell lennie.
    • A REJECT_TYPE = percentagereject_value 0 és 100 közötti lebegőpontosnak kell lennie. A százalékérték csak azokra a dedikált SQL-készletekre érvényes, ahol TYPE = HADOOP.

REJECT_SAMPLE_VALUE = reject_sample_value

Ez az attribútum megadása kötelező.REJECT_TYPE = percentage Meghatározza, hogy hány sort kíséreljen meg lekérni, mielőtt a PolyBase újraszámítja az elutasított sorok százalékos arányát.

A reject_sample_value paraméternek 0 és 2 147 483 647 közötti egész számnak kell lennie.

Ha például REJECT_SAMPLE_VALUE = 1000a PolyBase 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, a PolyBase további 1000 sort kísérel meg lekérni. A sikertelen sorok százalékos arányát továbbra is újraszámolja, miután minden további 1000 sort megpróbál importálni.

Jegyzet

Mivel a PolyBase 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 reject_value.

Example

Ez a példa bemutatja, hogyan működnek együtt a három REJECT lehetőség. Például, ha REJECT_TYPE = percentage, REJECT_VALUE = 30és REJECT_SAMPLE_VALUE = 100, a következő forgatókönyv fordulhat elő:

  • A PolyBase megpróbálja lekérni az első 100 sort; 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. Ennek eredményeként a PolyBase továbbra is beolvassa az adatokat a külső adatforrásból.
  • A PolyBase megkísérli betölteni a következő 100 sort; ezúttal 25 sor sikeres és 75 sor meghiúsul.
  • 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 PolyBase-lekérdezés 50% elutasított sortal meghiúsul, miután megkísérelte visszaadni az első 200 sort. Az egyező sorokat a rendszer még azelőtt adja vissza, hogy a PolyBase-lekérdezés észleli az elutasítási küszöbérték túllépésének észlelését.

REJECTED_ROW_LOCATION = könyvtár helye

Megadja a külső adatforrás azon könyvtárát, amelybe az elutasított sorokat és a megfelelő hibafájlt meg kell írni.

Ha a megadott elérési út nem létezik, létrejön. A rendszer létrehoz egy gyermekkönyvtárat _rejectedrowsnéven. A _ karakter biztosítja, hogy a könyvtár más adatfeldolgozás céljából ne legyen elérhető, kivéve, ha a helyparaméter kifejezetten el van nevezve.

  • A kiszolgáló nélküli SQL-készletekben az elérési út YearMonthDay_HourMinuteSecond_StatementID. A statementID használatával korrelálhatja a mappát az azt létrehozó lekérdezéssel.
  • Dedikált SQL-készletekben a létrehozott elérési út a YearMonthDay -HourMinuteSecondformátumban történő betöltés időpontján alapul, például 20180330-173205.

Ebben a mappában kétféle fájltípus van megírva, a _reason fájl és az adatfájl.

További információ: KÜLSŐ ADATFORRÁS LÉTREHOZÁSA.

Annak oka, hogy a fájlok és az adatfájlok is a CTAS utasításhoz társított lekérdezésazonosítóval rendelkeznek. Mivel az adatok és az ok külön fájlokban találhatók, a megfelelő fájloknak egyező utótagjuk van.

A kiszolgáló nélküli SQL-készletekben a error.json fájl egy JSON-tömböt tartalmaz, amely az elutasított sorokkal kapcsolatos hibákat észlelt. A hibát képviselő minden elem a következő attribútumokat tartalmazza:

Attribútum Leírás
Error A sor elutasításának oka.
Row Elutasított sor sorszáma a fájlban.
Column Elutasított oszlop sorszáma.
Value Elutasított oszlopérték. Ha az érték nagyobb 100 karakternél, csak az első 100 karakter jelenik meg.
File A sorhoz tartozó fájl elérési útja.

Engedélyek

A következő felhasználói engedélyek szükségesek:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE csak a főkulcs, az adatbázis hatókörébe tartozó hitelesítő adatok és külső adatforrás létrehozásához van szükség engedélyekre.

Vegye figyelembe, hogy a külső adatforrást létrehozó bejelentkezésnek engedéllyel kell rendelkeznie a Hadoopban vagy az Azure Blob Storage-ban található külső adatforrás olvasásához és írásához.

Fontos

Az ALTER ANY EXTERNAL DATA SOURCE engedély lehetővé teszi bármely tag számára, hogy bármilyen külső adatforrás-objektumot hozzon létre és módosítson, ezért lehetővé teszi az adatbázis hatókörébe tartozó hitelesítő adatok elérését is az adatbázisban. Ezt az engedélyt kiemelt jogosultságúnak kell tekinteni, ezért csak megbízható rendszerbiztonsági tagoknak adható.

Hibakezelés

A CREATE EXTERNAL TABLE utasítás végrehajtása során a PolyBase megpróbál csatlakozni a külső adatforráshoz. Ha a kapcsolódási kísérlet meghiúsul, az utasítás meghiúsul, és a külső tábla nem jön létre. Egy vagy több percig is eltarthat, amíg a parancs meghibásodik, mivel a PolyBase újrapróbálkozza a kapcsolatot, mielőtt végül meghiúsul a lekérdezés.

Megjegyzések

Alkalmi lekérdezési forgatókönyvekben, például SELECT FROM EXTERNAL TABLEa PolyBase egy ideiglenes táblában tárolja a külső adatforrásból lekért sorokat. A lekérdezés befejezése után a PolyBase eltávolítja és törli az ideiglenes táblát. A rendszer nem tárol állandó adatokat SQL-táblákban.

Ezzel szemben az importálási forgatókönyvben, például SELECT INTO FROM EXTERNAL TABLEa PolyBase a külső adatforrásból lekért sorokat állandó adatként tárolja az SQL-táblában. Az új tábla a lekérdezés végrehajtása során jön létre, amikor a PolyBase lekéri a külső adatokat.

A PolyBase a lekérdezési számítások egy részét leküldi a Hadoopba a lekérdezési teljesítmény javítása érdekében. Ezt a műveletet predikátum leküldéses leküldésnek nevezzük. Ennek engedélyezéséhez adja meg a Hadoop erőforrás-kezelő helybeállítását KÜLSŐ ADATFORRÁS LÉTREHOZÁSA.

Számos olyan külső táblát hozhat létre, amelyek ugyanarra vagy különböző külső adatforrásokra hivatkoznak.

Az Azure Synapse Analytics kiszolgáló nélküli és dedikált SQL-készletei különböző kódbázisokat használnak az adatvirtualizáláshoz. A kiszolgáló nélküli SQL-készletek támogatják a natív adatvirtualizálási technológiát. A dedikált SQL-készletek támogatják a natív és a PolyBase-adatvirtualizálást is. A PolyBase adatvirtualizálása akkor használatos, ha a rendszer a következővel TYPE=HADOOPhozza létre: EXTERNAL DATA SOURCE .

Korlátozások

Mivel egy külső tábla adatai nem az Azure Synapse közvetlen felügyelete alatt vannak, külső folyamattal bármikor módosíthatja vagy eltávolíthatja őket. Ennek eredményeképpen a külső táblák lekérdezési eredményei nem garantáltan determinisztikusak. Ugyanez a lekérdezés különböző eredményeket adhat vissza minden alkalommal, amikor egy külső táblán fut. Hasonlóképpen előfordulhat, hogy egy lekérdezés meghiúsul, ha a külső adatokat áthelyezik vagy eltávolítják.

A külső táblák nem támogatják az UTF-8 rendezésű forrásadatokat. Ha a forrásadatok UTF-8 rendezést használnak, explicit módon kell hozzárendelnie egy nem UTF-8 rendezést az CREATE EXTERNAL TABLE utasítás minden UTF-8 oszlopához. Ennek elmulasztása az alábbi kimenethez hasonló hibaüzenetet eredményez:

Msg 105105, Level 16, State 1, Line 22
105105;No column collation was specified in external table definition and the collation of current database 'Latin1_General_100_CI_AS_SC_UTF8' is not supported for external tables of type 'HADOOP'. Please specify a supported collation in the column definition.

Ha a külső tábla adatbázis-rendezése UTF-8, a tábla létrehozása meghiúsul, kivéve, ha minden oszlop kifejezetten nem UTF-8 rendezéssel van definiálva (például [UTF8_column] VARCHAR(128) COLLATE LATIN1_GENERAL_100_CI_AS_KS_WS NOT NULL).

Több külső táblát is létrehozhat, amelyek mindegyike különböző külső adatforrásokra hivatkozik.

Külső táblákban csak ezek az adatdefiníciós nyelvi (DDL-) utasítások engedélyezettek:

  • CREATE TABLE és DROP TABLE
  • CREATE STATISTICS és DROP STATISTICS
  • CREATE VIEW és DROP VIEW

A szerkezetek és műveletek nem támogatottak:

  • Külső DEFAULT táblaoszlopokra vonatkozó korlátozás
  • Adatmanipulációs nyelv (DML) a törlési, beszúrási és frissítési műveletekhez
  • Dinamikus adatmaszkolás külső táblaoszlopokon

Lekérdezési korlátozások

Javasoljuk, hogy mappánként ne haladja meg a 30 ezernél több fájlt. Ha túl sok fájlra hivatkozik, előfordulhat, hogy egy Java virtuális gép (JVM) memóriakivételen kívül esik, vagy a teljesítmény csökkenhet.

Táblázatszélesség korlátozásai

Az Azure Data Warehouse PolyBase sorszélesség-korlátja 1 MB egy érvényes sor tábladefiníciónkénti maximális mérete alapján. Ha az oszlopséma összege nagyobb, mint 1 MB, a PolyBase nem tudja lekérdezni az adatokat.

Adattípus korlátozásai

A következő adattípusok nem használhatók külső PolyBase-táblákban:

  • földrajzi
  • geometriai
  • hierarchiaazonosító
  • kép
  • szöveg
  • kontextus
  • xml
  • Bármely felhasználó által definiált típus

Zár

Megosztott zárolás az SCHEMARESOLUTION objektumon.

Példák

Egy. Adatok importálása az ADLS Gen 2-ből az Azure Synapse Analyticsbe

Az 1. generációs ADLS Gen példáiért lásd: Külső adatforrás létrehozása.

-- These values come from your Azure Active Directory Application used to authenticate to ADLS Gen 2.
CREATE DATABASE SCOPED CREDENTIAL ADLUser
WITH
    IDENTITY = '<clientID>@\<OAuth2.0TokenEndPoint>',
    SECRET = '<KEY>';
GO

CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
    TYPE = HADOOP,
    LOCATION = 'abfss://data@pbasetr.azuredatalakestore.net'
);
GO

CREATE EXTERNAL FILE FORMAT TextFileFormat
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
        FIELD_TERMINATOR = '|',
        STRING_DELIMITER = '',
        DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fff',
        USE_TYPE_DEFAULT = FALSE
    )
);
GO

CREATE EXTERNAL TABLE [dbo].[DimProduct_external]
(
    [ProductKey] INT NOT NULL,
    [ProductLabel] NVARCHAR NULL,
    [ProductName] NVARCHAR NULL
)
WITH (
    DATA_SOURCE = AzureDataLakeStore,
    LOCATION = '/DimProduct/',
    FILE_FORMAT = TextFileFormat,
    REJECT_TYPE = value,
    REJECT_VALUE = 0
);
GO

CREATE TABLE [dbo].[DimProduct]
WITH (DISTRIBUTION = HASH([ProductKey])) AS
GO

SELECT *
FROM [dbo].[DimProduct_external];

B. Adatok importálása Parquetből az Azure Synapse Analyticsbe

Az alábbi példa egy külső táblát hoz létre. Ezután 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 (
    DATA_SOURCE = population_ds,
    LOCATION = '/parquet/',
    FILE_FORMAT = census_file_format
);
GO

SELECT TOP 1 *
FROM census_external_table;

felügyelt Azure SQL-példány

* Elemzés
Platformrendszer (PDW) *
 

 

Áttekintés: Elemzési platformrendszer

Külső táblázat használata:

  • Hadoop- vagy Azure Blob Storage-adatok lekérdezése Transact-SQL utasításokkal.
  • Adatok importálása és tárolása a Hadoopból vagy az Azure Blob Storage-ból az Analytics platformrendszerbe.

Lásd még: CREATE EXTERNAL DATA SOURCE and DROP EXTERNAL TABLE.

Szintaxis

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'hdfs_folder_or_filepath' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
        [ , <reject_options> [ , ...n ] ]
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

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

}

Érvek

{ database_name.schema_name.table_name | schema_name.table_name | table_name}

A létrehozandó tábla egy-háromrészes neve.

Külső táblák esetében az Analytics Platform System csak a tábla metaadatait tárolja, valamint a Hadoopban vagy az Azure Blob Storage-ban hivatkozott fájlra vagy mappára vonatkozó alapvető statisztikákat. A rendszer nem helyez át vagy tárol tényleges adatokat az Analytics platformrendszerben.

Fontos

A legjobb teljesítmény érdekében, ha a külső adatforrás-illesztőprogram támogatja a háromrészes nevet, meg kell adnia a háromrészes nevet.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE támogatja az oszlopnév, az adattípus, a nullhihetőség és a rendezés konfigurálását. Külső táblákon nem használható DEFAULT CONSTRAINT .

Az oszlopdefinícióknak, beleértve az adattípusokat és az oszlopok számát, meg kell egyeznie a külső fájlok adataival. Ha eltérés van, a fájlsorokat a rendszer elutasítja a tényleges adatok lekérdezésekor.

LOCATION = "folder_or_filepath"

Megadja a Hadoopban vagy az Azure Blob Storage-ban tárolt tényleges adatok mappáit vagy fájlelérési útját és fájlnevét. A hely a gyökérmappából indul ki. A gyökérmappa a külső adatforrásban megadott adathely.

Az Analytics Platform Systemben a CREATE EXTERNAL TABLE AS SELECT (CETAS) utasítás létrehozza az elérési utat és a mappát, ha nem létezik. CREATE EXTERNAL TABLE nem hozza létre az elérési utat és a mappát.

Ha mappaként adja meg LOCATION , a külső táblából kiválasztott PolyBase-lekérdezés lekéri a fájlokat a mappából és annak összes almappájából. A Hadoophoz hasonlóan a PolyBase sem ad vissza rejtett mappákat. Nem ad vissza olyan fájlokat sem, amelyeknek a neve aláhúzással () vagy ponttal (_.) kezdődik.

A következő képen látható példában, ha LOCATION='/webdata/'egy PolyBase-lekérdezés sorokat ad vissza a következőtől mydata.txt : és mydata2.txt. Nem tér vissza mydata3.txt , mert egy rejtett mappa almappájában van, és nem tér vissza _hidden.txt , mert rejtett fájl.

Külső táblák mappáinak és fájladatainak diagramja.

Az alapértelmezett és csak a gyökérmappából való olvasás módosításához állítsa a <polybase.recursive.traversal> attribútumot "false" értékre a core-site.xml konfigurációs fájlban. Ez a fájl az SQL Server <SqlBinRoot>\PolyBase\Hadoop\Conf\ gyökerének bin alatt található. Például C:\Program Files\Microsoft SQL Server\MSSQL13.XD14\MSSQL\Binn\.

DATA_SOURCE = external_data_source_name

Megadja annak a külső adatforrásnak a nevét, amely a külső adatok helyét tartalmazza. Ez a hely vagy Hadoop vagy Azure Blob Storage. Külső adatforrás létrehozásához használja a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA) parancsot.

FILE_FORMAT = external_file_format_name

Megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatok fájltípusát és tömörítési módját tárolja. Külső fájlformátum létrehozásához használja CREATE EXTERNAL FILE FORMAT.

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

Ez a beállítás csak olyan külső adatforrásokkal használható, ahol TYPE = HADOOP.

Megadhatja azokat az elutasítási paramétereket, amelyek meghatározzák, hogy a PolyBase hogyan kezeli a külső adatforrásból lekért piszkos rekordokat. Az adatrekordok akkor minősülnek "piszkosnak", ha a tényleges adattípusok vagy az oszlopok száma nem egyezik a külső tábla oszlopdefinícióival.

Ha nem ad meg vagy módosít elutasító értékeket, a PolyBase alapértelmezett értékeket használ. Az elutasítási paraméterekkel kapcsolatos információk további metaadatokként lesznek tárolva, amikor utasítással rendelkező CREATE EXTERNAL TABLE külső táblát hoz létre. Amikor egy jövőbeli SELECT utasítás vagy SELECT INTO SELECT utasítás adatokat választ ki a külső táblából, a PolyBase az elutasítási beállításokkal határozza meg azoknak a soroknak a számát vagy százalékát, amelyeket a tényleges lekérdezés meghiúsulása előtt el lehet utasítani. A lekérdezés (részleges) eredményeket ad vissza, amíg meg nem lépi az elutasítási küszöbértéket. Ezután a megfelelő hibaüzenettel meghiúsul.

REJECT_TYPE = { érték | százalék }

Tisztázza, hogy a REJECT_VALUE beállítás konstans értékként vagy százalékként van-e megadva.

  • érték

    REJECT_VALUE egy literális érték, nem százalék. A PolyBase-lekérdezés meghiúsul, ha az elutasított sorok száma meghaladja a reject_value.

    Ha és például REJECT_VALUE = 5REJECT_TYPE = valuea PolyBase-lekérdezés SELECT öt sor elvetése után meghiúsul.

  • százalékos

    REJECT_VALUE százalékos érték, nem pedig literális érték. A PolyBase-lekérdezések akkor hiúsulnak meg, 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.

REJECT_VALUE = reject_value

Megadja a lekérdezés sikertelensége előtt elutasítható sorok értékét vagy százalékos arányát.

A REJECT_TYPE = valuereject_value 0 és 2 147 483 647 közötti egész számnak kell lennie.

A REJECT_TYPE = percentagereject_value 0 és 100 közötti lebegőpontosnak kell lennie.

REJECT_SAMPLE_VALUE = reject_sample_value

Ez az attribútum megadása kötelező.REJECT_TYPE = percentage Meghatározza, hogy hány sort kíséreljen meg lekérni, mielőtt a PolyBase újraszámítja az elutasított sorok százalékos arányát.

A reject_sample_value paraméternek 0 és 2 147 483 647 közötti egész számnak kell lennie.

Ha például REJECT_SAMPLE_VALUE = 1000a PolyBase 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, a PolyBase további 1000 sort kísérel meg lekérni. A sikertelen sorok százalékos arányát továbbra is újraszámolja, miután minden további 1000 sort megpróbál importálni.

Jegyzet

Mivel a PolyBase 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 reject_value.

Example

Ez a példa bemutatja, hogyan működnek együtt a három REJECT lehetőség. Például, ha REJECT_TYPE = percentage, REJECT_VALUE = 30és REJECT_SAMPLE_VALUE = 100, a következő forgatókönyv fordulhat elő:

  • A PolyBase megpróbálja lekérni az első 100 sort; 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. Ennek eredményeként a PolyBase továbbra is beolvassa az adatokat a külső adatforrásból.
  • A PolyBase megkísérli betölteni a következő 100 sort; ezúttal 25 sor sikeres és 75 sor meghiúsul.
  • 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 PolyBase-lekérdezés 50% elutasított sortal meghiúsul, miután megkísérelte visszaadni az első 200 sort. Az egyező sorokat a rendszer még azelőtt adja vissza, hogy a PolyBase-lekérdezés észleli az elutasítási küszöbérték túllépésének észlelését.

Engedélyek

A következő felhasználói engedélyek szükségesek:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE

Vegye figyelembe, hogy a külső adatforrást létrehozó bejelentkezésnek engedéllyel kell rendelkeznie a Hadoopban vagy az Azure Blob Storage-ban található külső adatforrás olvasásához és írásához.

Fontos

Az ALTER ANY EXTERNAL DATA SOURCE engedély lehetővé teszi bármely tag számára, hogy bármilyen külső adatforrás-objektumot hozzon létre és módosítson, ezért lehetővé teszi az adatbázis hatókörébe tartozó hitelesítő adatok elérését is az adatbázisban. Ezt az engedélyt kiemelt jogosultságúnak kell tekinteni, ezért csak megbízható rendszerbiztonsági tagoknak adható.

Hibakezelés

A CREATE EXTERNAL TABLE utasítás végrehajtása során a PolyBase megpróbál csatlakozni a külső adatforráshoz. Ha a kapcsolódási kísérlet meghiúsul, az utasítás meghiúsul, és a külső tábla nem jön létre. Egy vagy több percig is eltarthat, amíg a parancs meghibásodik, mivel a PolyBase újrapróbálkozza a kapcsolatot, mielőtt végül meghiúsul a lekérdezés.

Megjegyzések

Alkalmi lekérdezési forgatókönyvekben, például SELECT FROM EXTERNAL TABLEa PolyBase egy ideiglenes táblában tárolja a külső adatforrásból lekért sorokat. A lekérdezés befejezése után a PolyBase eltávolítja és törli az ideiglenes táblát. A rendszer nem tárol állandó adatokat SQL-táblákban.

Ezzel szemben az importálási forgatókönyvben, például SELECT INTO FROM EXTERNAL TABLEa PolyBase a külső adatforrásból lekért sorokat állandó adatként tárolja az SQL-táblában. Az új tábla a lekérdezés végrehajtása során jön létre, amikor a PolyBase lekéri a külső adatokat.

A PolyBase a lekérdezési számítások egy részét leküldi a Hadoopba a lekérdezési teljesítmény javítása érdekében. Ezt a műveletet predikátum leküldéses leküldésnek nevezzük. Ennek engedélyezéséhez adja meg a Hadoop erőforrás-kezelő helybeállítását KÜLSŐ ADATFORRÁS LÉTREHOZÁSA.

Számos olyan külső táblát hozhat létre, amelyek ugyanarra vagy különböző külső adatforrásokra hivatkoznak.

Korlátozások

Mivel egy külső tábla adatai nincsenek a berendezés közvetlen felügyelete alatt, külső folyamattal bármikor módosíthatja vagy eltávolíthatja őket. Ennek eredményeképpen a külső táblák lekérdezési eredményei nem garantáltan determinisztikusak. Ugyanez a lekérdezés különböző eredményeket adhat vissza minden alkalommal, amikor egy külső táblán fut. Hasonlóképpen előfordulhat, hogy egy lekérdezés meghiúsul, ha a külső adatokat áthelyezik vagy eltávolítják.

Több külső táblát is létrehozhat, amelyek mindegyike különböző külső adatforrásokra hivatkozik. Ha egyszerre futtat lekérdezéseket különböző Hadoop-adatforrásokkal, akkor minden Hadoop-forrásnak ugyanazt a "hadoop-kapcsolat" kiszolgálókonfigurációs beállítást kell használnia. Például nem futtathat egyszerre lekérdezést Egy Cloudera Hadoop-fürt és egy Hortonworks Hadoop-fürt között, mivel ezek különböző konfigurációs beállításokat használnak. A konfigurációs beállításokról és a támogatott kombinációkról lásd a PolyBase kapcsolati konfigurációját.

Külső táblákban csak ezek az adatdefiníciós nyelvi (DDL-) utasítások engedélyezettek:

  • CREATE TABLE és DROP TABLE
  • CREATE STATISTICS és DROP STATISTICS
  • CREATE VIEW és DROP VIEW

A szerkezetek és műveletek nem támogatottak:

  • Külső DEFAULT táblaoszlopokra vonatkozó korlátozás
  • Adatmanipulációs nyelv (DML) a törlési, beszúrási és frissítési műveletekhez
  • Dinamikus adatmaszkolás külső táblaoszlopokon

Lekérdezési korlátozások

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 ezer fájlt tartalmazó HDFS-mappákon futtathat PolyBase-lekérdezéseket. Javasoljuk, hogy tartsa rövidre a külső fájl elérési útját, és HDFS-mappánként legfeljebb 30 ezer fájlt használjon. Ha túl sok fájlra hivatkozik, előfordulhat, hogy a Java virtuális gép (JVM) memóriakimaradást tapasztal.

Táblázatszélesség korlátozásai

Az SQL Server 2016-ban (13.x) a PolyBase sorszélesség-korlátja 32 KB egy érvényes sor tábladefiníciónkénti maximális mérete alapján. Ha az oszlopséma összege nagyobb, mint 32 KB, a PolyBase nem tudja lekérdezni az adatokat.

Az Azure Synapse Analyticsben ez a korlátozás 1 MB-ra nőtt.

Adattípus korlátozásai

A következő adattípusok nem használhatók külső PolyBase-táblákban:

  • földrajzi
  • geometriai
  • hierarchiaazonosító
  • kép
  • szöveg
  • kontextus
  • xml
  • Bármely felhasználó által definiált típus

Zár

Megosztott zárolás az SCHEMARESOLUTION objektumon.

Biztonság

A külső táblák adatfájljait a Hadoop vagy az Azure Blob Storage tárolja. Ezeket az adatfájlokat a saját folyamatai hozzák létre és kezelik. A külső adatok biztonságának kezelése az Ön feladata.

Példák

Egy. HDFS-adatok csatlakoztatása az Analytics Platform rendszeradataival

SELECT cs.user_ip
FROM ClickStream AS cs
     INNER JOIN [User] AS u
         ON cs.user_ip = u.user_ip
WHERE cs.url = 'www.microsoft.com';

B. Soradatok importálása a HDFS-ből egy elosztott elemzési platform rendszertáblájába

CREATE TABLE ClickStream_PDW
WITH (DISTRIBUTION = HASH(url)) AS
SELECT url,
       event_date,
       user_ip
FROM ClickStream;

C. Soradatok importálása a HDFS-ből egy replikált Elemzési platform rendszertáblájába

CREATE TABLE ClickStream_PDW
WITH (DISTRIBUTION = REPLICATE) AS
SELECT url,
       event_date,
       user_ip
FROM ClickStream;

* Felügyelt Azure SQL-példány *  

 

Áttekintés: Felügyelt Azure SQL-példány

Létrehoz egy külső adattáblát a felügyelt Azure SQL-példányban. További információ: Felügyelt Azure SQL-példány adatvirtualizálása.

A felügyelt Azure SQL-példány adatvirtualizálása több fájlformátumban biztosít hozzáférést a külső adatokhoz az Azure Data Lake Storage Gen2-ben vagy az Azure Blob Storage-ban, valamint T-SQL-utasításokkal való lekérdezéséhez, akár helyileg tárolt relációs adatok összekapcsolásával is.

Lásd még: CREATE EXTERNAL DATA SOURCE and DROP EXTERNAL TABLE.

Szintaxis

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'filepath' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

Érvek

{ database_name.schema_name.table_name | schema_name.table_name | table_name}

A létrehozandó tábla egy-háromrészes neve.

Külső tábla esetén csak a tábla metaadatai, valamint az Azure Data Lake-ben vagy az Azure Blob Storage-ban hivatkozott fájl vagy mappa alapszintű statisztikái. Külső táblák létrehozásakor a rendszer nem helyez át vagy tárol tényleges adatokat.

Fontos

A legjobb teljesítmény érdekében, ha a külső adatforrás-illesztőprogram támogatja a háromrészes nevet, meg kell adnia a háromrészes nevet.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE támogatja az oszlopnév, az adattípus, a nullhihetőség és a rendezés konfigurálását. Külső táblákon nem használható DEFAULT CONSTRAINT .

Az oszlopdefinícióknak, beleértve az adattípusokat és az oszlopok számát, meg kell egyeznie a külső fájlok adataival. Ha eltérés van, a fájlsorokat a rendszer elutasítja a tényleges adatok lekérdezésekor.

LOCATION = "folder_or_filepath"

Megadja az Azure Data Lake-ben vagy az Azure Blob Storage-ban lévő tényleges adatok mappáit vagy fájlelérési útját és fájlnevét. A hely a gyökérmappából indul ki. A gyökérmappa a külső adatforrásban megadott adathely. CREATE EXTERNAL TABLE nem hozza létre az elérési utat és a mappát.

Ha mappaként adja meg LOCATION , a külső táblából kiválasztott Felügyelt Azure SQL-példány lekérdezése lekéri a fájlokat a mappából, de nem az összes almappájából.

A felügyelt Azure SQL-példány nem talál fájlokat almappákban vagy rejtett mappákban. Nem ad vissza olyan fájlokat sem, amelyeknek a neve aláhúzással () vagy ponttal (_.) kezdődik.

Az alábbi példaképben, ha LOCATION='/webdata/', a lekérdezés sorokat mydata.txtad vissza. Nem tér vissza mydata2.txt , mert egy almappában van, nem tér vissza mydata3.txt , mert rejtett mappában van, és nem tér vissza _hidden.txt , mert rejtett fájl.

Külső táblák mappáinak és fájladatainak diagramja.

DATA_SOURCE = external_data_source_name

Megadja annak a külső adatforrásnak a nevét, amely a külső adatok helyét tartalmazza. Ez a hely az Azure Data Lake-ben található. Külső adatforrás létrehozásához használja a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA) parancsot.

FILE_FORMAT = external_file_format_name

Megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatok fájltípusát és tömörítési módját tárolja. Külső fájlformátum létrehozásához használja CREATE EXTERNAL FILE FORMAT.

Engedélyek

A következő felhasználói engedélyek szükségesek:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE csak a főkulcs, az adatbázis hatókörébe tartozó hitelesítő adatok és külső adatforrás létrehozásához van szükség engedélyekre.

Vegye figyelembe, hogy a külső adatforrást létrehozó bejelentkezésnek engedéllyel kell rendelkeznie a Hadoopban vagy az Azure Blob Storage-ban található külső adatforrás olvasásához és írásához.

Fontos

Az ALTER ANY EXTERNAL DATA SOURCE engedély lehetővé teszi bármely tag számára, hogy bármilyen külső adatforrás-objektumot hozzon létre és módosítson, ezért lehetővé teszi az adatbázis hatókörébe tartozó hitelesítő adatok elérését is az adatbázisban. Ezt az engedélyt kiemelt jogosultságúnak kell tekinteni, ezért csak megbízható rendszerbiztonsági tagoknak adható.

Megjegyzések

Alkalmi lekérdezési forgatókönyvekben, például SELECT FROM EXTERNAL TABLEa külső adatforrásból lekért sorok egy ideiglenes táblában vannak tárolva. A lekérdezés befejezése után a rendszer eltávolítja a sorokat, és törli az ideiglenes táblát. A rendszer nem tárol állandó adatokat SQL-táblákban.

Ezzel szemben az importálási forgatókönyvben, például SELECT INTO FROM EXTERNAL TABLEa külső adatforrásból lekért sorok állandó adatokként vannak tárolva az SQL-táblában. Az új tábla a külső adatok lekérésekor jön létre a lekérdezés végrehajtása során.

A felügyelt Azure SQL-példány adatvirtualizálása jelenleg írásvédett.

Számos olyan külső táblát hozhat létre, amelyek ugyanarra vagy különböző külső adatforrásokra hivatkoznak.

Korlátozások

Mivel egy külső tábla adatai nem tartoznak a felügyelt Azure SQL-példány közvetlen felügyelete alá, külső folyamat bármikor módosíthatja vagy eltávolíthatja őket. Ennek eredményeképpen a külső táblák lekérdezési eredményei nem garantáltan determinisztikusak. Ugyanez a lekérdezés különböző eredményeket adhat vissza minden alkalommal, amikor egy külső táblán fut. Hasonlóképpen előfordulhat, hogy egy lekérdezés meghiúsul, ha a külső adatokat áthelyezik vagy eltávolítják.

Több külső táblát is létrehozhat, amelyek mindegyike különböző külső adatforrásokra hivatkozik.

Külső táblákban csak ezek az adatdefiníciós nyelvi (DDL-) utasítások engedélyezettek:

  • CREATE TABLE és DROP TABLE
  • CREATE STATISTICS és DROP STATISTICS
  • CREATE VIEW és DROP VIEW

A szerkezetek és műveletek nem támogatottak:

  • A DEFAULT külső táblaoszlopokra vonatkozó korlátozás
  • Adatmanipulációs nyelv (DML) a törlési, beszúrási és frissítési műveletekhez

Táblázatszélesség korlátozásai

Az 1 MB-os sorszélesség-korlát egy érvényes sor tábladefiníció szerinti maximális méretén alapul. Ha az oszlopséma összege nagyobb, mint 1 MB, az adatvirtualizálási lekérdezések sikertelenek.

Adattípus korlátozásai

A következő adattípusok nem használhatók külső táblákban a felügyelt Azure SQL-példányban:

  • földrajzi
  • geometriai
  • hierarchiaazonosító
  • kép
  • szöveg
  • kontextus
  • xml
  • json
  • Bármely felhasználó által definiált típus

Zár

Megosztott zárolás az SCHEMARESOLUTION objektumon.

Példák

Egy. Külső adatok lekérdezése felügyelt Azure SQL-példányból külső táblával

További példákért lásd a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA ) vagy a felügyelt Azure SQL-példány adatvirtualizálása című témakört.

  1. Ha nem létezik, hozza létre az adatbázis főkulcsát.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  2. Hozza létre az adatbázis hatókörébe tartozó hitelesítő adatokat EGY SAS-jogkivonat használatával. Felügyelt identitást is használhat.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH
        IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<KEY>'; --Removing leading '?'
    
  3. Hozza létre a külső adatforrást a hitelesítő adatok használatával.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
        CREDENTIAL = [MyCredential]
    );
    
  4. Hozzon létre egy EXTERNAL FILE FORMAT és egy EXTERNAL TABLE, az adatokat úgy kérdezi le, mintha az egy helyi tábla lenne.

    -- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE
    
    --Create external file format
    CREATE EXTERNAL FILE FORMAT DemoFileFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
    --Create external table:
    CREATE EXTERNAL TABLE tbl_TaxiRides
    (
        vendorID VARCHAR (100) COLLATE Latin1_General_BIN2,
        tpepPickupDateTime DATETIME2,
        tpepDropoffDateTime DATETIME2,
        passengerCount INT,
        tripDistance FLOAT,
        puLocationId VARCHAR (8000),
        doLocationId VARCHAR (8000),
        startLon FLOAT,
        startLat FLOAT,
        endLon FLOAT,
        endLat FLOAT,
        rateCodeId SMALLINT,
        storeAndFwdFlag VARCHAR (8000),
        paymentType VARCHAR (8000),
        fareAmount FLOAT,
        extra FLOAT,
        mtaTax FLOAT,
        improvementSurcharge VARCHAR (8000),
        tipAmount FLOAT,
        tollsAmount FLOAT,
        totalAmount FLOAT
    )
    WITH (
        DATA_SOURCE = NYCTaxiExternalDataSource,
        LOCATION = 'yellow/puYear = */puMonth = */*.parquet',
        FILE_FORMAT = MyFileFormat
    );
    
    --Then, query the data via an external table with T-SQL:
    SELECT TOP 10 *
    FROM tbl_TaxiRides;
    

További információ a külső táblákról és a kapcsolódó fogalmakról az alábbi cikkekben:

 

Áttekintés: Microsoft Fabric

A következőre vonatkozik: Microsoft Fabric Data Warehouse

A Fabric Data Warehouse-ra vonatkozó további információkért és példákért OPENROWSET lásd:

felügyelt Azure SQL-példány

* Fabric SQL adatbázis *  

 

Áttekintés: SQL adatbázis a Microsoft Fabric-ben

Létrehoz egy külső táblát.

Adatvirtualizálással (előzetes verzió) használható.

Szintaxis

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'filepath' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

Érvek

{ database_name.schema_name.table_name | schema_name.table_name | table_name}

A létrehozandó tábla egy-háromrészes neve.

Külső tábla esetén az SQL csak a tábla metaadatait tárolja a fájl vagy mappa alapszintű statisztikáival együtt. Külső táblák létrehozásakor a rendszer nem helyez át vagy tárol tényleges adatokat a Fabric SQL-adatbázisában.

Fontos

A legjobb teljesítmény érdekében, ha a külső adatforrás-illesztőprogram támogatja a háromrészes nevet, meg kell adnia a háromrészes nevet.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE támogatja az oszlopnév, az adattípus, a nullhihetőség és a rendezés konfigurálását. Külső táblákon nem használható DEFAULT CONSTRAINT . A külső táblák oszlopai nem támogatják ezeket az adattípusokat:

  • földrajzi
  • geometriai
  • hierarchiaazonosító
  • kép
  • szöveg
  • kontextus
  • xml
  • json
  • Bármely felhasználó által definiált típus

Az oszlopdefinícióknak, beleértve az adattípusokat és az oszlopok számát, meg kell egyeznie a külső fájlok adataival. Ha eltérés van, a fájlsorokat a rendszer elutasítja a tényleges adatok lekérdezésekor.

LOCATION = "folder_or_filepath"

Megadja a Microsoft Fabric OneLake-ben lévő tényleges adatok mappájának vagy fájlútvonalának és fájlnevét.

ADAT_FORRÁS

DATA_SOURCE a külső adatok helyét tartalmazó külső adatforrás nevét adja meg. Külső adatforrás létrehozásához használja a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA) parancsot.

FILE_FORMAT = external_file_format_name

Megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatok fájltípusát és tömörítési módját tárolja. Külső fájlformátum létrehozásához használja CREATE EXTERNAL FILE FORMAT.

Engedélyek

A külső táblához hozzáféréssel rendelkező felhasználók automatikusan hozzáférnek az alapul szolgáló távoli táblákhoz a külső adatforrás definíciójában megadott hitelesítő adatok alapján. Kerülje a jogosultságok nem kívánt megemelését a külső adatforrás hitelesítő adataival. Külső táblát használjon GRANT vagy REVOKE használjon úgy, mintha normál táblázat lenne. Miután definiálta a külső adatforrást és a külső táblákat, mostantól teljes T-SQL-t használhat a külső táblákon.

CREATE EXTERNAL TABLE a következő felhasználói engedélyeket igényli:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE csak a főkulcs, az adatbázis hatókörébe tartozó hitelesítő adatok és külső adatforrás létrehozásához van szükség engedélyekre.

A külső adatforrást létrehozó bejelentkezésnek engedéllyel kell rendelkeznie a Hadoopban vagy az Azure Blob Storage-ban található külső adatforrás olvasásához és írásához.

Fontos

Az ALTER ANY EXTERNAL DATA SOURCE engedély lehetővé teszi bármely tag számára, hogy bármilyen külső adatforrás-objektumot hozzon létre és módosítson, ezért lehetővé teszi az adatbázis hatókörébe tartozó hitelesítő adatok elérését is az adatbázisban. Ezt az engedélyt kiemelt jogosultságúnak kell tekinteni, ezért csak megbízható rendszerbiztonsági tagoknak adható.

Zár

Megosztott zárolás az SCHEMARESOLUTION objektumon.

Megjegyzések

Alkalmi lekérdezési forgatókönyvekben, például SELECT FROM EXTERNAL TABLEa külső adatforrásból lekért sorok egy ideiglenes táblában vannak tárolva. A lekérdezés befejezése után a rendszer eltávolítja a sorokat, és törli az ideiglenes táblát. A rendszer nem tárol állandó adatokat SQL-táblákban.

Ezzel szemben az importálási forgatókönyvben, például SELECT INTO FROM EXTERNAL TABLEa külső adatforrásból lekért sorok állandó adatokként vannak tárolva az SQL-táblában. Az új tábla a külső adatok lekérésekor jön létre a lekérdezés végrehajtása során.

A Fabric SQL adatbázis csak a OneLake-et támogatja a Microsoft Fabric-ben adatforrásként.

Számos olyan külső táblát hozhat létre, amelyek ugyanarra vagy különböző külső adatforrásokra hivatkoznak.

Táblázatszélesség korlátozásai

Az 1 MB-os sorszélesség-korlát egy érvényes sor tábladefiníció szerinti maximális méretén alapul. Ha az oszlopséma összege nagyobb, mint 1 MB, az adatvirtualizálási lekérdezések sikertelenek.

Hibakezelés

Az utasítás végrehajtása CREATE EXTERNAL TABLE közben, ha a kapcsolódási kísérlet meghiúsul, az utasítás meghiúsul, és a külső tábla nem jön létre. Egy vagy több percig is eltarthat, amíg a parancs meghibásodik, mivel az SQL Database újrapróbálkozza a kapcsolatot, mielőtt végül meghiúsul a lekérdezés.

Korlátozások

Amikor a Fabric SQL-adatbázisban egy CSV-fájlra mutató külső táblákat hoz létre, meg kell adnia a táblázatsémát, például: SELECT * FROM [schema].[table_name]. Ellenkező esetben a következő hibaüzenet jelenik meg:

Msg 208, Level 16, State 160, Line 1: Invalid object name 'SQLdatabase-id'

Mivel egy külső tábla adatai nincsenek az adatbázismotor közvetlen felügyelete alatt, egy külső folyamat bármikor módosíthatja vagy eltávolíthatja őket. Ennek eredményeképpen a külső táblák lekérdezési eredményei nem garantáltan determinisztikusak. Ugyanez a lekérdezés különböző eredményeket adhat vissza minden alkalommal, amikor egy külső táblán fut. Hasonlóképpen előfordulhat, hogy egy lekérdezés meghiúsul, ha a külső adatokat áthelyezik vagy eltávolítják.

Több külső táblát is létrehozhat, amelyek mindegyike különböző külső adatforrásokra hivatkozik.

Külső táblákban csak ezek az adatdefiníciós nyelvi (DDL-) utasítások engedélyezettek:

  • CREATE TABLE és DROP TABLE
  • CREATE STATISTICS és DROP STATISTICS
  • CREATE VIEW és DROP VIEW

A szerkezetek és műveletek nem támogatottak:

  • A DEFAULT külső táblaoszlopokra vonatkozó korlátozás.
  • A törlés, beszúrás és frissítés adatmanipulációs nyelv (DML) műveletei.

Példák

Egy. Külső tábla létrehozása a Microsoft Fabric OneLake-ben elérhető Parquet-fájllal

CREATE EXTERNAL DATA SOURCE [MainLakeHouse]
WITH (
    LOCATION = 'abfss://<WorkspaceID>@<tenant>.dfs.fabric.microsoft.com/<Lakehouse_id'
);
GO

CREATE EXTERNAL FILE FORMAT [Parquetff]
WITH (
    FORMAT_TYPE = PARQUET
);
GO

CREATE EXTERNAL TABLE Customer_parquet
(
    CustomerKey INT,
    GeoAreaKey INT,
    StartDT DATETIME2,
    EndDT DATETIME2,
    Continent NVARCHAR (50),
    Gender NVARCHAR (10),
    Title NVARCHAR (10),
    GivenName NVARCHAR (100),
    MiddleInitial VARCHAR (2),
    Surname NVARCHAR (100),
    StreetAddress NVARCHAR (200),
    City NVARCHAR (100),
    State NVARCHAR (100),
    StateFull NVARCHAR (100),
    ZipCode NVARCHAR (20),
    Country_Region NCHAR (2),
    CountryFull NVARCHAR (100),
    Birthday DATETIME2,
    Age INT,
    Occupation NVARCHAR (100),
    Company NVARCHAR (100),
    Vehicle NVARCHAR (100),
    Latitude DECIMAL (10, 6),
    Longitude DECIMAL (10, 6)
)
WITH (
    DATA_SOURCE = MainLakeHouse,
    LOCATION = '/Files/parquet/customer.parquet',
    FILE_FORMAT = [parquetff]
);
GO

SELECT *
FROM Customer_parquet;