Použití externích tabulek s synapse SQL

Externí tabulka odkazuje na data umístěná v Hadoopu, Azure Storage blob nebo Azure Data Lake Storage. Externí tabulky se používají ke čtení dat ze souborů nebo k zápisu dat do souborů v Azure Storage. Díky synapse SQL můžete pomocí externích tabulek číst externí data pomocí vyhrazeného fondu SQL nebo bez serveru SQL fondu.

V závislosti na typu externího zdroje dat můžete použít dva typy externích tabulek:

  • Externí tabulky Hadoop, které můžete použít ke čtení a exportu dat v různých formátech dat, jako jsou CSV, Parquet a ORC. Externí tabulky Hadoop jsou k dispozici ve vyhrazených SQL fondech, ale nejsou k dispozici ve fondech SQL serveru.
  • Nativní externí tabulky, které můžete použít ke čtení a exportu dat v různých formátech dat, jako jsou CSV a Parquet. Nativní externí tabulky jsou k dispozici ve fondech SQL a jsou ve verzi Public Preview ve vyhrazených SQL fondech.

Klíčové rozdíly mezi Hadoopem a nativními externími tabulkami jsou uvedeny v následující tabulce:

Typ externí tabulky Hadoop Nativní
Vyhrazený fond SQL K dispozici. Tabulky Parquet jsou k dispozici ve verzi Public Preview.
Bezserverový fond SQL Není k dispozici K dispozici.
Podporované formáty Oddělovače/CSV, Parquet, ORC, Hive RC a RC Bez serveru SQL fond: Oddělovače/CSV, Parquet a Delta Lake (Preview)
Vyhrazený SQL: Parquet
Eliminace oddílů složek No Pouze pro dělené tabulky synchronizované z Apache Spark fondů v pracovním prostoru Synapse do bez serveru SQL fondy
Vlastní formát umístění Yes Ano, použití zástupných znaků jako /year=*/month=*/day=*
Rekurzivní prohledávání složek No Pouze v bezsou SQL, pokud je zadaná /** na konci cesty k umístění
Storage rozevíracího seznamu filtru No Ano v bez serveru SQL fond. Pro řetězcové nabízení je potřeba použít Latin1_General_100_BIN2_UTF8 kolaci pro VARCHAR sloupce.
Storage ověřování Storage Přístupový klíč (SAK), AAD, spravovaná identita, vlastní identita aplikace Azure AD Sdílený přístupový podpis (SAS), AAD, spravovaná identita

Poznámka

Nativní externí tabulky ve formátu Delta Lake jsou ve verzi Public Preview. Další informace najdete v tématu Dotazování souborů Delta Lake (Preview). CETAS nepodporuje export obsahu ve formátu Delta Lake.

Externí tabulky ve vyhrazeném SQL a bez serveru SQL fond

Externí tabulky můžete použít k:

  • Dotazování azure blob Storage a Azure Data Lake Gen2 pomocí příkazů transact-SQL.
  • Ukládat výsledky dotazů do souborů ve službě Azure Blob Storage nebo Azure Data Lake Storage pomocí CETAS.
  • Importujte data z Azure Blob Storage a Azure Data Lake Storage a uložte je do vyhrazeného fondu SQL (pouze tabulky Hadoop ve vyhrazeném fondu).

Poznámka

Při použití ve spojení s příkazem CREATE TABLE AS SELECT importuje výběr z externí tabulky data do tabulky ve vyhrazeném SQL fondu. Kromě příkazu COPY jsou externítabulky užitečné pro načítání dat.

Kurz načítání najdete v tématu Použití PolyBase k načtení dat z Azure Blob Storage.

Externí tabulky ve fondech SQL synapse můžete vytvořit pomocí následujících kroků:

  1. CREATE EXTERNAL DATA SOURCE pro odkazování na externí úložiště Azure a zadání přihlašovacích údajů, které se mají použít pro přístup k úložišti.
  2. CREATE EXTERNAL FILE FORMAT popisuje formát souborů CSV nebo Parquet.
  3. CREATE EXTERNAL TABLE nad soubory umístěnými ve zdroji dat ve stejném formátu.

Zabezpečení

Uživatel musí mít SELECT oprávnění k externí tabulce ke čtení dat. Externí tabulky přistupovat k základnímu úložišti Azure pomocí přihlašovacích údajů definovaných ve zdroji dat s oborem databáze pomocí následujících pravidel:

  • Zdroj dat bez přihlašovacích údajů umožňuje externím tabulkám přístup k veřejně dostupným souborům v úložišti Azure.
  • Zdroj dat může mít přihlašovací údaje, které umožňují externím tabulkám přístup jenom k souborům v úložišti Azure pomocí tokenu SAS nebo spravované identity pracovního prostoru – příklady najdete v článku Vývoj souborů úložiště pro řízení přístupu k úložišti.

VYTVOŘENÍ EXTERNÍHO ZDROJE DAT

Externí zdroje dat se používají pro připojení k účtům úložiště. Kompletní dokumentace je uvedená tady.

Syntaxe pro CREATE EXTERNAL DATA SOURCE

Externí zdroje dat s jsou TYPE=HADOOP k dispozici pouze ve vyhrazených SQL fondech.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
(    LOCATION         = '<prefix>://<path>'
     [, CREDENTIAL = <database scoped credential> ]
     , TYPE = HADOOP
)
[;]

Argumenty pro CREATE EXTERNAL DATA SOURCE

data_source_name

Určuje uživatelem definovaný název zdroje dat. Název musí být v rámci databáze jedinečný.

Umístění

LOCATION = '<prefix>://<path>' – Poskytuje protokol připojení a cestu k externímu zdroji dat. V umístění je možné použít následující vzory:

Externí zdroj dat Předpona umístění Cesta k umístění
Azure Blob Storage wasb[s] <container>@<storage_account>.blob.core.windows.net
Azure Blob Storage http[s] <storage_account>.blob.core.windows.net/<container>/subfolders
Azure Data Lake Store Gen 1 http[s] <storage_account>.azuredatalakestore.net/webhdfs/v1
Azure Data Lake Store Gen 2 http[s] <storage_account>.dfs.core.windows.net/<container>/subfolders

https: umožňuje v cestě použít podsložku .

Přihlašovací údaj

CREDENTIAL = <database scoped credential> volitelné přihlašovací údaje, které se budou používat k ověření ve službě Azure Storage. Externí zdroj dat bez přihlašovacích údajů má přístup k veřejnému účtu úložiště nebo používá identitu Azure AD volajícího pro přístup k souborům v úložišti.

  • Ve vyhrazeném SQL může přihlašovací údaje s oborem databáze zadat vlastní identitu aplikace, spravovanou identitu pracovního prostoru nebo klíč SAK.
  • Ve fondu SQL může přihlašovací údaje s oborem databáze zadat spravovanou identitu pracovního prostoru nebo klíč SAS.

TYP

TYPE = je možnost, která určuje, že technologie založená na jazyce Java by měla být použita HADOOP pro přístup k podkladovým souborům. Tento parametr není možné použít v bez serveru SQL, který používá integrovanou nativní čtečku.

Příklad vytvoření EXTERNÍHO ZDROJE DAT

Následující příklad vytvoří externí zdroj dat Hadoop ve vyhrazeném SQL pro Azure Data Lake Gen2 odkazující na datovou sadu New York:

CREATE DATABASE SCOPED CREDENTIAL [ADLS_credential]
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = 'sv=2018-03-28&ss=bf&srt=sco&sp=rl&st=2019-10-14T12%3A10%3A25Z&se=2061-12-31T12%3A10%3A00Z&sig=KlSU2ullCscyTS0An0nozEpo4tO5JAgGBvw%2FJX2lguw%3D'
GO

CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
  -- Please note the abfss endpoint when your account has secure transfer enabled
  ( LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net' ,
    CREDENTIAL = ADLS_credential ,
    TYPE = HADOOP
  ) ;

Následující příklad vytvoří externí zdroj dat pro Azure Data Lake Gen2 odkazující na veřejně dostupnou datovou sadu v New Yorku:

CREATE EXTERNAL DATA SOURCE YellowTaxi
WITH ( LOCATION = 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/',
       TYPE = HADOOP)

CREATE EXTERNAL FILE FORMAT

Vytvoří externí objekt formátu souboru, který definuje externí data uložená ve službě Azure Blob Storage nebo Azure Data Lake Storage. Vytvoření formátu externího souboru je předpokladem pro vytvoření externí tabulky. Kompletní dokumentaci najdete tady.

Vytvořením formátu externího souboru určíte skutečné rozložení dat, na která odkazuje externí tabulka.

Syntaxe pro CREATE EXTERNAL FILE FORMAT

-- Create an external file format for PARQUET files.  
CREATE EXTERNAL FILE FORMAT file_format_name  
WITH (  
    FORMAT_TYPE = PARQUET  
    [ , DATA_COMPRESSION = {  
        'org.apache.hadoop.io.compress.SnappyCodec'  
      | 'org.apache.hadoop.io.compress.GzipCodec'      }  
    ]);  

--Create an external file format for DELIMITED TEXT files
CREATE EXTERNAL FILE FORMAT file_format_name  
WITH (  
    FORMAT_TYPE = DELIMITEDTEXT  
    [ , DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec' ]
    [ , FORMAT_OPTIONS ( <format_options> [ ,...n  ] ) ]  
    );  

<format_options> ::=  
{  
    FIELD_TERMINATOR = field_terminator  
    | STRING_DELIMITER = string_delimiter
    | First_Row = integer
    | USE_TYPE_DEFAULT = { TRUE | FALSE }
    | Encoding = {'UTF8' | 'UTF16'}
    | PARSER_VERSION = {'parser_version'}
}

Argumenty pro CREATE EXTERNAL FILE FORMAT

file_format_name – Určuje název formátu externího souboru.

FORMAT_TYPE = [ PARQUET | DELIMITEDTEXT]– Určuje formát externích dat.

  • PARQUET – určuje formát Parquet.
  • DELIMITEDTEXT – Určuje textový formát s oddělovači sloupců, které se také nazývají ukončovací znaky polí.

FIELD_TERMINATOR = field_terminator – platí jenom pro textové soubory s oddělovači. Ukončovací znak pole určuje jeden nebo více znaků, které označí konec každého pole (sloupce) v textovém souboru s oddělovači. Výchozí hodnota je znak kanálu (ꞌ|ꞌ).

Příklady:

  • FIELD_TERMINATOR = "|"
  • FIELD_TERMINATOR = ' '
  • FIELD_TERMINATOR = ꞌ\tꞌ

STRING_DELIMITER = string_delimiter – Určuje ukončovací znak pole pro data řetězce typu v textovém souboru s oddělovači. Oddělovač řetězců má jeden nebo více znaků a je uzavřený v jednoduchých uvozovkách. Výchozí hodnota je prázdný řetězec ("").

Příklady:

  • STRING_DELIMITER = '"'
  • STRING_DELIMITER = '*'
  • STRING_DELIMITER = ꞌ,ꞌ

FIRST_ROW = First_row_int – Určuje číslo řádku, které se přečte jako první a použije se pro všechny soubory. Nastavení hodnoty na dvě způsobí, že se při načtení dat první řádek v každém souboru (řádek záhlaví) přeskočí. Řádky se přeskočí na základě existence ukončovače řádků (/r/n, /r, /n).

USE_TYPE_DEFAULT = { TRUE | FALSE } – Určuje, jak zpracovat chybějící hodnoty v textových souborech s oddělovači při načítání dat z textového souboru.

TRUE – pokud načítáte data z textového souboru, uložte každou chybějící hodnotu pomocí datového typu výchozí hodnoty pro odpovídající sloupec v definici externí tabulky. Například chybějící hodnotu nahraďte následujícím kódem:

  • 0, pokud je sloupec definovaný jako číselný sloupec. Desetinné sloupce nejsou podporované a způsobí chybu.
  • Prázdný řetězec (""), pokud je sloupec sloupcem řetězce.
  • 1900-01-01, pokud je sloupec sloupcem data.

FALSE – Všechny chybějící hodnoty uložte jako HODNOTU NULL. Všechny hodnoty NULL, které jsou uloženy pomocí slova NULL v textovém souboru s oddělovači, se importuje jako řetězec NULL.

Encoding = {'UTF8' | UTF16} – bez serveru SQL může číst textové soubory s oddělovači v kódování UTF8 a UTF16.

DATA_COMPRESSION = data_compression_method – tento argument určuje metodu komprese dat pro externí data.

Typ formátu souboru PARQUET podporuje následující metody komprese:

  • DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
  • DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'

Při čtení z externích tabulek PARQUET se tento argument ignoruje, ale používá se při zápisu do externích tabulek pomocí CETAS.

Formát souboru DELIMITEDTEXT podporuje následující metodu komprese:

  • DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'

PARSER_VERSION = "parser_version" Určuje verzi analyzátoru, která se má použít při čtení souborů CSV. Dostupné verze analyzátoru jsou a 1.0 2.0 . Tato možnost je dostupná jenom v bezdomovových SQL fondech.

Příklad pro CREATE EXTERNAL FILE FORMAT

Následující příklad vytvoří formát externího souboru pro soubory sčítání lidu:

CREATE EXTERNAL FILE FORMAT census_file_format
WITH
(  
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
)

CREATE EXTERNAL TABLE

Příkaz CREATE EXTERNAL TABLE vytvoří externí tabulku pro službu Synapse SQL přístup k datům uloženým ve službě Azure Blob Storage nebo Azure Data Lake Storage.

Syntaxe pro CREATE 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
        [, TABLE_OPTIONS = N'{"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}' ]
        [, <reject_options> [ ,...n ] ] 
    )
[;] 

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]

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

Argumenty CREATE EXTERNAL TABLE

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

Název tabulky, která se má vytvořit, má jednu až tři části. U externí tabulky ukládá synapse SQL jen metadata tabulky. Ve službě Synapse se ve službě Synapse SQL žádná skutečná data.

<column_definition>, ... n ]

CREATE EXTERNAL TABLE podporuje možnost konfigurovat název sloupce, datový typ a kolaci. U externích tabulek nemůžete použít VÝCHOZÍ OMEZENÍ.

Důležité

Definice sloupců, včetně datových typů a počtu sloupců, musí odpovídat datům v externích souborech. Pokud dojde k neshodě, řádky souboru budou odmítnuty při dotazování na skutečná data. Informace o řízení chování odmítnutých řádků najdete v tématu o možnostech zamítnutí.

Při čtení ze souborů Parquet můžete zadat pouze sloupce, které chcete číst, a zbytek přeskočit.

LOCATION = 'folder_or_filepath'

Určuje složku nebo cestu k souboru a název souboru pro skutečná data v azure blob Storage. Umístění začíná od kořenové složky. Kořenová složka je umístění dat zadané v externím zdroji dat.

Rekurzivní data pro externí tabulky

Nativní externí tabulky na rozdíl od externích tabulek Hadoop nevrací podsložky, pokud na konci cesty nezadáte /**. V tomto příkladu, pokud LOCATION='/webdata/', bez serveru SQL fondu, vrátí řádky z mydata.txt. Nevrátí žádné další mydata2.txt mydata3.txt protože jsou umístěné v podsložce. Tabulky Hadoop vrátí všechny soubory v rámci jakékoli dílčí složky.

Hadoop i nativní externí tabulky přeskočí soubory s názvy, které začínají podtrženým (_) nebo tečkou (.).

DATA_SOURCE = external_data_source_name

Určuje název externího zdroje dat, který obsahuje umístění externích dat. Pokud chcete vytvořit externí zdroj dat, použijte CREATE EXTERNAL DATA SOURCE.

FILE_FORMAT = external_file_format_name

Určuje název objektu formátu externího souboru, ve kterém je uložený typ souboru a metoda komprese pro externí data. Pokud chcete vytvořit formát externího souboru, použijte CREATE EXTERNAL FILE FORMAT.

Možnosti odmítnutí

Poznámka

Funkce Zamítnuté řádky je v Public Preview. Upozorňujeme, že funkce zamítnutých řádků funguje pro textové soubory s oddělovači a PARSER_VERSION 1.0.

Můžete zadat parametry zamítnutí, které určují, jak bude služba zpracovávat nečtené záznamy, které načte z externího zdroje dat. Datový záznam se považuje za "nezačištěný", pokud skutečné datové typy neodpovídají definicím sloupců externí tabulky.

Pokud nezadáte nebo nezměníte možnosti zamítnutí, služba použije výchozí hodnoty. Tyto informace o parametrech reject se ukládají jako další metadata při vytváření externí tabulky pomocí příkazu CREATE EXTERNAL TABLE. Když budoucí příkaz SELECT nebo příkaz SELECT INTO SELECT vybere data z externí tabulky, služba použije možnosti zamítnutí k určení počtu řádků, které lze odmítnout před selháním skutečného dotazu. Dotaz vrátí (částečné) výsledky, dokud se prahová hodnota zamítnutí nedosáhne. Pak selže s příslušnou chybovou zprávou.

REJECT_TYPE = hodnota

V tuto chvíli je to jediná podporovaná hodnota. Vysvětluje, že REJECT_VALUE je zadána jako hodnota literálu.

hodnota

REJECT_VALUE je hodnota literálu. Dotaz selže, pokud počet zamítnutých řádků překročí reject_value.

Pokud například REJECT_VALUE = 5 a REJECT_TYPE = hodnota, dotaz SELECT selže po zamítnutí pěti řádků.

REJECT_VALUE = reject_value

Určuje počet řádků, které lze odmítnout, než dotaz selže.

Pro REJECT_TYPE = hodnota reject_value celé číslo v rozmezí od 0 do 2 147 483 647.

REJECTED_ROW_LOCATION = umístění adresáře

Určuje adresář v externím zdroji dat, na který by se měly zapsat odmítnuté řádky a odpovídající chybový soubor. Pokud zadaná cesta neexistuje, služba ji vytvoří za vás. Vytvoří se podřízený adresář s názvem "rejectedrows". Znak "" zajišťuje, aby byl adresář řídicím adresářem pro jiné zpracování dat, pokud není explicitně pojmenován v parametru Location. V tomto adresáři je vytvořena složka založená na čase odeslání zatížení ve formátu YearMonthDay_HourMinuteSecond_StatementID (ex. 20180330-173205-559EE7D2-196D-400A-806D-3BF5D007F891). ID příkazu můžete použít ke korelaci složky s dotazem, který je vygeneroval. V této složce jsou zapsány dva soubory: Error. JSON a datový soubor.

soubor Error. JSON obsahuje pole JSON se zjištěnými chybami souvisejícími s ODMÍTNUTÝMI Řádky. Každý element představující chybu obsahuje následující atributy:

Atribut Popis
Chyba Důvod odmítnutí řádku
Řádek V souboru se nachází pořadové číslo odmítnutého řádku.
Sloupec Pořadové číslo odmítnutého sloupce
Hodnota Hodnota odmítnutého sloupce Pokud je hodnota větší než 100 znaků, zobrazí se pouze prvních 100 znaků.
Soubor Cesta k souboru, ke kterému řádek patří

TABLE_OPTIONS

TABLE_OPTIONS = JSON – možnosti – určuje sadu možností, které popisují způsob čtení podkladových souborů. V současné době je k dispozici pouze možnost, která je k dispozici, aby bylo možné "READ_OPTIONS":["ALLOW_INCONSISTENT_READS"] Ignorovat aktualizace provedené v podkladových souborech, a to i v případě, že to může způsobit nekonzistentní operace čtení. Tuto možnost použijte pouze ve zvláštních případech, kde máte často připojené soubory. tato možnost je k dispozici ve fondu SQL bez serveru pro formát CSV.

Oprávnění vytvořit externí tabulku

Chcete-li vybrat z externí tabulky, budete potřebovat správné přihlašovací údaje se seznamem a oprávněními ke čtení.

Příklad vytvoření externí tabulky

Následující příklad vytvoří externí tabulku. Vrátí první řádek:

CREATE EXTERNAL TABLE census_external_table
(
    decennialTime varchar(20),
    stateName varchar(100),
    countyName varchar(100),
    population int,
    race varchar(50),
    sex    varchar(10),
    minAge int,
    maxAge int
)  
WITH (
    LOCATION = '/parquet/',
    DATA_SOURCE = population_ds,  
    FILE_FORMAT = census_file_format
)
GO

SELECT TOP 1 * FROM census_external_table

Vytvoření a dotazování externích tabulek ze souboru v Azure Data Lake

pomocí Data Lake možností průzkumu v Synapse studiu teď můžete vytvořit a zadat dotaz na externí tabulku pomocí SQL fondu Synapse s jednoduchým kliknutím pravým tlačítkem myši na soubor. Gesto jedním kliknutím pro vytvoření externích tabulek z ADLS Gen2ho účtu úložiště je podporované jenom pro soubory Parquet.

Požadavky

  • Musíte mít přístup k pracovnímu prostoru s alespoň Storage Blob Data Contributor rolí přístupu k účtu adls Gen2 nebo seznamům Access Control (ACL), které vám umožní dotazovat se na soubory.

  • musíte mít aspoň oprávnění k vytváření a dotazování externích tabulek v Synapse fondu SQL (vyhrazeno nebo bez serveru).

Z panelu data vyberte soubor, ze kterého chcete vytvořit externí tabulku:

externaltable1

Otevře se dialogové okno. vyberte vyhrazený fond SQL nebo fond SQL bez serveru, zadejte název tabulky a vyberte otevřít skript:

externaltable2

skript SQL automaticky vygeneroval odvození schématu ze souboru:

externaltable3

Spusťte skript. Skript automaticky spustí výběr Top 100 *.:

externaltable4

Externí tabulka je teď vytvořená, aby ji uživatel mohl příště dotazovat na obsah této externí tabulky, a to přímo z podokna data:

externaltable5

Další kroky

Informace o tom, jak uložit výsledky dotazu do externí tabulky v Azure Storage, najdete v článku CETAS . Můžete také spustit dotazování Apache Spark pro externí tabulky Azure synapse.