Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2022 (16.x) a novější
azure Synapse Analytics Analytics
Platform System (PDW)
Vytvoří externí tabulku a pak paralelně exportuje výsledky příkazu Transact-SQL SELECT.
- Systém platformy Azure Synapse Analytics a Analytics podporuje Hadoop nebo Azure Blob Storage.
- SQL Server 2022 (16.x) a novější verze podporují
CREATE EXTERNAL TABLE AS SELECT
(CETAS) pro vytvoření externí tabulky a paralelní export výsledku příkazu Transact-SQL SELECT do Azure Data Lake Storage (ADLS) Gen2, účtu Úložiště Azure V2 a úložiště objektů kompatibilního s S3.
Poznámka:
Možnosti a zabezpečení CETAS pro Azure SQL Managed Instance se liší od SQL Serveru nebo Azure Synapse Analytics. Další informace najdete ve verzi Azure SQL Managed Instance příkazu CREATE EXTERNAL TABLE AS SELECT.
Poznámka:
Možnosti a zabezpečení CETAS pro bezserverové fondy ve službě Azure Synapse Analytics se liší od SQL Serveru. Další informace najdete v tématu CETAS s Synapse SQL.
Syntaxe
CREATE EXTERNAL TABLE { [ [ database_name . [ schema_name ] . ] | schema_name . ] table_name }
[ (column_name [ , ...n ] ) ]
WITH (
LOCATION = 'hdfs_folder' | '<prefix>://<path>[:<port>]' ,
DATA_SOURCE = external_data_source_name ,
FILE_FORMAT = external_file_format_name
[ , <reject_options> [ , ...n ] ]
)
AS <select_statement>
[;]
<reject_options> ::=
{
| REJECT_TYPE = value | percentage
| REJECT_VALUE = reject_value
| REJECT_SAMPLE_VALUE = reject_sample_value
}
<select_statement> ::=
[ WITH <common_table_expression> [ , ...n ] ]
SELECT <select_criteria>
Argumenty
[ [ database_name . [ schema_name ] . ] | schema_name . ] table_name
Název tabulky 1 až tři části, který se má vytvořit v databázi. V případě externí tabulky ukládá relační databáze pouze metadata tabulky.
[ ( column_name [ ,... n ] ) ]
Název sloupce tabulky.
UMÍSTĚNÍ
Platí pro: Systém platformy Azure Synapse Analytics a Analytics
'hdfs_folder'**
Určuje, kam se mají zapisovat výsledky příkazu SELECT na externí zdroj dat. Umístění je název složky a volitelně může obsahovat cestu relativní ke kořenové složce clusteru Hadoop nebo úložiště objektů blob. PolyBase vytvoří cestu a složku, pokud ještě neexistuje.
Externí soubory jsou zapsány a hdfs_folder
pojmenovány QueryID_date_time_ID.format
, kde ID
je přírůstkový identifikátor a format
je exportovaný datový formát. Příklad: QID776_20160130_182739_0.orc
.
UMÍSTĚNÍ musí odkazovat na složku a mít koncovou /
cestu, například: aggregated_data/
.
platí pro: SQL Server 2022 (16.x) a novější
prefix://path[:port]
poskytuje protokol připojení (předpona), cestu a volitelně port k externímu zdroji dat, kde se zapíše výsledek příkazu SELECT.
Pokud je cílem úložiště objektů kompatibilní s S3, musí nejprve existovat kontejner, ale PolyBase může v případě potřeby vytvořit podsložky. SQL Server 2022 (16.x) podporuje Azure Data Lake Storage Gen2, účet úložiště Azure V2 a úložiště objektů kompatibilní s S3. Soubory ORC se v současné době nepodporují.
DATA_SOURCE = external_data_source_name
Určuje název objektu externího zdroje dat, který obsahuje umístění, kde jsou externí data uložena nebo budou uložena. Umístění je buď cluster Hadoop, nebo azure Blob Storage. Chcete-li vytvořit externí zdroj dat, použijte příkaz CREATE EXTERNAL DATA SOURCE (Transact-SQL).
FILE_FORMAT = external_file_format_name
Určuje název objektu formátu externího souboru, který obsahuje formát externího datového souboru. Chcete-li vytvořit formát externího souboru, použijte příkaz CREATE EXTERNAL FILE FORMAT (Transact-SQL).
Možnosti ODMÍTNUTÍ
Možnosti REJECT se v době spuštění tohoto CREATE EXTERNAL TABLE AS SELECT
příkazu nepoužijí. Místo toho se tady zadají, aby je databáze později mohli použít při importu dat z externí tabulky. Když později příkaz CREATE TABLE AS SELECT vybere data z externí tabulky, použije databáze možnosti zamítnutí k určení počtu nebo procenta řádků, které se nedají importovat, než import zastaví.
REJECT_VALUE = reject_value
Určuje hodnotu nebo procento řádků, které se nedají importovat, než databáze zastaví import.
REJECT_TYPE = hodnota | procento
Vysvětluje, zda REJECT_VALUE možnost je literálová hodnota nebo procento.
hodnota
Používá se, pokud REJECT_VALUE je hodnota literálu, nikoli procento. Databáze zastaví import řádků z externího datového souboru, pokud počet neúspěšných řádků překročí reject_value.
Pokud a
REJECT_VALUE = 5
databázeREJECT_TYPE = value
například přestane importovat řádky poté, co se nepodařilo importovat pět řádků.procento
Používá se, pokud REJECT_VALUE je procento, nikoli hodnota literálu. Databáze zastaví import řádků z externího datového souboru, pokud procento neúspěšných řádků překročí reject_value. Procento neúspěšných řádků se počítá v intervalech. Platné pouze ve vyhrazených fondech SQL, pokud
TYPE=HADOOP
.
REJECT_SAMPLE_VALUE = reject_sample_value
Požadováno při
REJECT_TYPE = percentage
. Určuje početřádkůchPokud například REJECT_SAMPLE_VALUE = 1000, databáze vypočítá procento neúspěšných řádků po pokusu o import 1 000 řádků z externího datového souboru. Pokud je procento neúspěšných řádků menší než reject_value, databáze se pokusí načíst dalších 1 000 řádků. Databáze bude i nadále přepočítávat procento neúspěšných řádků po pokusu o import všech dalších 1 000 řádků.
Poznámka:
Vzhledem k tomu, že databáze vypočítá procento neúspěšných řádků v intervalech, skutečné procento neúspěšných řádků může překročit reject_value.
Příklad:
Tento příklad ukazuje, jak tři možnosti ODMÍTNUTÍ vzájemně spolupracují. Pokud například
REJECT_TYPE = percentage, REJECT_VALUE = 30, REJECT_SAMPLE_VALUE = 100
může dojít k následujícímu scénáři:- Databáze se pokusí načíst prvních 100 řádků, z nichž 25 selže a 75 bude úspěšné.
- Procento neúspěšných řádků se vypočítá jako 25%, což je menší než hodnota zamítnutí 30%. Takže není potřeba zastavit zatížení.
- Databáze se pokusí načíst dalších 100 řádků. Tentokrát se nezdaří 25 a 75 selže.
- Procento neúspěšných řádků se přepočítá jako 50%. Procento neúspěšných řádků překročilo hodnotu 30% odmítnutí.
- Zatížení selže s 50% neúspěšnými řádky po pokusu o načtení 200 řádků, což je větší než zadaný limit 30%.
WITH common_table_expression
Určuje dočasnou pojmenovanou sadu výsledků označovanou jako běžný výraz tabulky (CTE). Další informace naleznete v tématu WITH common_table_expression (Transact-SQL)
SELECT <select_criteria>
Naplní novou tabulku výsledky příkazu SELECT. select_criteria je tělo příkazu SELECT, které určuje, která data se mají zkopírovat do nové tabulky. Informace o příkazech SELECT naleznete v tématu SELECT (Transact-SQL).
Poznámka:
Klauzule ORDER BY v select nemá žádný vliv na CETAS.
Možnosti sloupce
column_name [ ,... n ]
Názvy sloupců neumožňují možnosti sloupců uvedené v příkazu CREATE TABLE. Místo toho můžete zadat volitelný seznam jednoho nebo více názvů sloupců pro novou tabulku. Sloupce v nové tabulce používají zadané názvy. Při zadávání názvů sloupců musí počet sloupců v seznamu sloupců odpovídat počtu sloupců ve výsledcích výběru. Pokud nezadáte žádné názvy sloupců, použije nová cílová tabulka názvy sloupců ve výsledcích příkazu select.
Nemůžete zadat žádné další možnosti sloupců, jako jsou datové typy, kolace nebo nullability. Každý z těchto atributů je odvozen z výsledků příkazu SELECT. Pomocí příkazu SELECT však můžete změnit atributy. Příklad najdete v tématu Použití CETAS ke změně atributů sloupců.
Povolení
Ke spuštění tohoto příkazu potřebuje uživatel databáze všechna tato oprávnění nebo členství:
- Oprávnění ALTER SCHEMA pro místní schéma, které bude obsahovat novou tabulku nebo členství v db_ddladmin pevné databázové roli.
- OPRÁVNĚNÍ CREATE TABLE nebo členství v db_ddladmin pevné databázové roli.
- Oprávnění SELECT pro všechny objekty odkazované v select_criteria.
Přihlášení potřebuje všechna tato oprávnění:
- SPRÁVA HROMADNÝCH OPERACÍ
- ZMĚNIT JAKÝKOLIV EXTERNÍ ZDROJ DAT
- ZMĚNIT JAKÝKOLI EXTERNÍ FORMÁT SOUBORU
- Obecně platí, že musíte mít oprávnění k obsahu seznamu složek a zapisovat do složky LOCATION pro CETAS.
- Ve službě Azure Synapse Analytics a Platform Platform System zapisujte oprávnění ke čtení a zápisu do externí složky v clusteru Hadoop nebo v Úložišti objektů blob v Azure.
- V SYSTÉMU SQL Server 2022 (16.x) je také nutné nastavit správná oprávnění k externímu umístění. Zapište oprávnění k výstupu dat do umístění a oprávnění ke čtení pro přístup k nim.
- Pro Azure Blob Storage a Azure Data Lake Gen2
SHARED ACCESS SIGNATURE
musí mít token udělená následující oprávnění ke kontejneru: čtení, zápis, výpis, vytvoření. - Pro Azure Blog Storage musí být zaškrtnuté
Allowed Services
políčko :Blob
pro vygenerování tokenu SAS. - U Azure Data Lake Gen2 musí být zaškrtnuté
políčko a < a0 />, aby se vygeneroval token SAS.
Důležité
Oprávnění ALTER ANY EXTERNAL DATA SOURCE uděluje všem objektům objektu externího zdroje dat možnost vytvářet a upravovat všechny objekty externího zdroje dat, takže také umožňuje přístup ke všem přihlašovacím údajům v databázi s vymezeným oborem databáze. Toto oprávnění musí být považováno za vysoce privilegované a musí být uděleno pouze důvěryhodným objektům zabezpečení v systému.
Zpracování chyb
Při CREATE EXTERNAL TABLE AS SELECT
exportu dat do souboru s oddělovači textu neexistuje žádný soubor zamítnutí pro řádky, které se nepodaří exportovat.
Při vytváření externí tabulky se databáze pokusí připojit k externímu umístění. Pokud připojení selže, příkaz selže a externí tabulka se nevytvořila. Může trvat minutu nebo déle, než se příkaz nezdaří, protože databáze opakuje připojení alespoň třikrát.
Pokud CREATE EXTERNAL TABLE AS SELECT
dojde ke zrušení nebo selhání, databáze se jednorázově pokusí odebrat všechny nové soubory a složky, které jsou již vytvořeny v externím zdroji dat.
V Systému platformy Azure Synapse Analytics a Analytics databáze hlásí všechny chyby Javy, ke kterým dochází u externího zdroje dat během exportu dat.
Poznámky
CREATE EXTERNAL TABLE AS SELECT
Po dokončení příkazu můžete spouštět Transact-SQL dotazy na externí tabulku. Tyto operace importují data do databáze po dobu trvání dotazu, pokud neimportujete pomocí příkazu CREATE TABLE AS SELECT.
Název a definice externí tabulky jsou uloženy v metadatech databáze. Data jsou uložená v externím zdroji dat.
Příkaz CREATE EXTERNAL TABLE AS SELECT
vždy vytvoří nedílnou tabulku, i když je zdrojová tabulka rozdělená na oddíly.
Pro SQL Server 2022 (16.x) musí být tato možnost allow polybase export
povolena pomocí sp_configure
. Další informace naleznete v tématu Nastavení allow polybase export
možnosti konfigurace.
Pro plány dotazů v Systému platformy Azure Synapse Analytics a Analytics vytvořeném pomocí funkce EXPLAIN databáze používá tyto operace plánu dotazů pro externí tabulky: přesun externího náhodného náhodného přesunu, přesun externího vysílání, přesun externího oddílu.
V systému Analytics Platform jako předpoklad pro vytvoření externí tabulky musí správce zařízení nakonfigurovat připojení Hadoop. Další informace najdete v tématu Konfigurace připojení k externím datům (systém analytických platforem) v dokumentaci k systému analytických platforem, kterou si můžete stáhnout z webu Microsoft Download Center.
Limity a omezení
Vzhledem k tomu, že data externí tabulky se nacházejí mimo databázi, operace zálohování a obnovení fungují pouze s daty uloženými v databázi. V důsledku toho se zálohuje a obnovuje pouze metadata.
Databáze při obnovování zálohy databáze obsahující externí tabulku neověřuje připojení k externímu zdroji dat. Pokud původní zdroj není přístupný, obnovení metadat externí tabulky bude i nadále úspěšné, ale operace SELECT u externí tabulky selžou.
Databáze nezaručuje konzistenci dat mezi databází a externími daty. Vy, zákazník, zodpovídáte výhradně za zachování konzistence mezi externími daty a databází.
Operace jazyka DML (Data Manipulat Language) nejsou u externích tabulek podporované. Nemůžete například použít příkazy Transact-SQL update, insert nebo delete Transact-SQL k úpravě externích dat.
OPERACE CREATE TABLE, DROP TABLE, CREATE STATISTICS, DROP STATISTICS, CREATE VIEW a DROP VIEW jsou jediné operace jazyka DDL (Data Definition Language) povolené u externích tabulek.
Omezení a omezení pro Azure Synapse Analytics
Ve vyhrazených fondech SQL Azure Synapse Analytics a platformě Analytics Platform System může PolyBase při spouštění 32 souběžných dotazů PolyBase využívat maximálně 33 000 souborů na složku. Toto maximální číslo zahrnuje soubory i podsložky v každé složce HDFS. Pokud je míra souběžnosti menší než 32, může uživatel spouštět dotazy PolyBase na složky v HDFS, které obsahují více než 33 000 souborů. Doporučujeme, aby uživatelé Systému Hadoop a PolyBase měli krátké cesty k souborům a nepoužívali více než 30 000 souborů na složku HDFS. Pokud se odkazuje na příliš mnoho souborů, dojde k výjimce prostředí JVM mimo paměť.
V bezserverových fondech SQL není možné externí tabulky vytvořit v umístění, kde aktuálně máte data. Pokud chcete znovu použít umístění, které bylo použito k ukládání dat, musí být umístění v ADLS ručně odstraněno. Další omezení a osvědčené postupy najdete v tématu Osvědčené postupy optimalizace filtru.
Ve vyhrazených fondech SQL služby Azure Synapse Analytics a platformě Analytics Při CREATE EXTERNAL TABLE AS SELECT
výběru ze souboru RCFile nesmí hodnoty sloupců v souboru RCFile obsahovat znak kanálu (|
).
FUNKCE SET ROWCOUNT (Transact-SQL) nemá žádný vliv na FUNKCI CREATE EXTERNAL TABLE AS SELECT. Chcete-li dosáhnout podobného chování, použijte top (Transact-SQL).
Projděte si omezení názvů souborů a odkazů na kontejnery, objekty blob a metadata .
Chyby znaků
Následující znaky v datech můžou způsobit chyby včetně odmítnutých záznamů se CREATE EXTERNAL TABLE AS SELECT
soubory Parquet.
V systému Platformy Azure Synapse Analytics a Analytics se to vztahuje také na soubory ORC.
|
-
"
(znak uvozovky) \r\n
\r
\n
Pokud chcete použít CREATE EXTERNAL TABLE AS SELECT
tyto znaky, musíte nejprve spustit CREATE EXTERNAL TABLE AS SELECT
příkaz pro export dat do textových souborů s oddělovači, kde je pak můžete převést na Parquet nebo ORC pomocí externího nástroje.
Práce s parquet
Při práci se soubory CREATE EXTERNAL TABLE AS SELECT
parquet vygeneruje jeden soubor parquet na dostupný procesor až do nakonfigurovaného maximálního stupně paralelismu (MAXDOP). Každý soubor může růst až o 190 GB, po tom, co SQL Server vygeneruje více souborů Parquet podle potřeby.
Tip OPTION (MAXDOP n)
dotazu ovlivní pouze část SELECT .CREATE EXTERNAL TABLE AS SELECT
Nemá žádný vliv na počet souborů parquet. Je považováno pouze za MAXDOP na úrovni databáze a MAXDOP na úrovni instance.
Uzamčení
Přebírá sdílený zámek objektu SCHEMARESOLUTION.
Podporované datové typy
CETAS lze použít k ukládání sad výsledků s následujícími datovými typy SQL:
- binární
- varbinary
- uklízečka
- varchar
- nchar
- nvarchar
- smalldate
- datum
- Datum a čas
- datetime2
- datetimeoffset
- Čas
- desetinné číslo
- číselný
- plout
- opravdový
- bigint
- tinyint
- smallint
- int (integer)
- bigint
- trochu
- peníze
- drobné peníze
Příklady
A. Vytvoření tabulky Hadoop pomocí příkazu CREATE EXTERNAL TABLE AS SELECT
Platí pro: Systém platformy Azure Synapse Analytics a Analytics
Následující příklad vytvoří novou externí tabulku s názvem hdfsCustomer
, která používá definice sloupců a data ze zdrojové tabulky dimCustomer
.
Definice tabulky je uložena v databázi a výsledky příkazu SELECT jsou exportovány do /pdwdata/customer.tbl
souboru v externím zdroji dat Hadoop customer_ds. Soubor je formátován podle formátu externího souboru customer_ff.
Název souboru vygeneruje databáze a obsahuje ID dotazu, aby bylo možné soubor snadno zarovnat s dotazem, který ho vygeneroval.
Cesta hdfs://xxx.xxx.xxx.xxx:5000/files/
předcházející adresáři zákazníka už musí existovat. Pokud adresář zákazníka neexistuje, databáze vytvoří tento adresář.
Poznámka:
Tento příklad určuje 5000. Pokud není port zadaný, databáze jako výchozí port používá 8020.
Výsledné umístění a název souboru Hadoop bude hdfs:// xxx.xxx.xxx.xxx:5000/files/Customer/ QueryID_YearMonthDay_HourMinutesSeconds_FileIndex.txt.
.
-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE hdfsCustomer
WITH (
LOCATION = '/pdwdata/customer.tbl',
DATA_SOURCE = customer_ds,
FILE_FORMAT = customer_ff
) AS
SELECT *
FROM dimCustomer;
GO
B. Použití nápovědy k dotazu s příkazem CREATE EXTERNAL TABLE AS SELECT
Platí pro: Systém platformy Azure Synapse Analytics a Analytics
Tento dotaz zobrazuje základní syntaxi pro použití nápovědy pro spojení dotazu s příkazem CREATE EXTERNAL TABLE AS SELECT
. Po odeslání dotazu použije databáze strategii připojení hash k vygenerování plánu dotazu. Další informace o tipech spojení a o tom, jak použít klauzuli OPTION, naleznete v tématu OPTION – klauzule (Transact-SQL).
Poznámka:
Tento příklad určuje 5000. Pokud není port zadaný, databáze jako výchozí port používá 8020.
-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE dbo.FactInternetSalesNew
WITH (
LOCATION = '/files/Customer',
DATA_SOURCE = customer_ds,
FILE_FORMAT = customer_ff
) AS
SELECT T1.*
FROM dbo.FactInternetSales T1
INNER JOIN dbo.DimCustomer T2
ON (T1.CustomerKey = T2.CustomerKey)
OPTION (HASH JOIN);
GO
C. Změna atributů sloupců pomocí CETAS
Platí pro: Systém platformy Azure Synapse Analytics a Analytics
Tento příklad používá CETAS ke změně datových typů, nullability a kolace pro několik sloupců v FactInternetSales
tabulce.
-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE dbo.FactInternetSalesNew
WITH (
LOCATION = '/files/Customer',
DATA_SOURCE = customer_ds,
FILE_FORMAT = customer_ff
) AS
SELECT T1.ProductKey AS ProductKeyNoChange,
T1.OrderDateKey AS OrderDate,
T1.ShipDateKey AS ShipDate,
T1.CustomerKey AS CustomerKeyNoChange,
T1.OrderQuantity AS Quantity,
T1.SalesAmount AS MONEY
FROM dbo.FactInternetSales T1
INNER JOIN dbo.DimCustomer T2
ON (T1.CustomerKey = T2.CustomerKey)
OPTION (HASH JOIN);
GO
D. Použití PŘÍKAZU CREATE EXTERNAL TABLE AS SELECT k exportu dat jako parquet
platí pro: SQL Server 2022 (16.x)
Následující příklad vytvoří novou externí tabulku s názvemext_sales
, která používá data z tabulky SalesOrderDetail
.AdventureWorks2022
Je nutné povolit možnost konfigurace exportu polybase .
Výsledek příkazu SELECT se uloží do dříve nakonfigurovaného a pojmenovaného s3_eds
úložiště objektů kompatibilního s S3 a správných přihlašovacích údajů vytvořených jako s3_dsc
. Umístění souboru parquet bude <ip>:<port>/cetas/sales.parquet
místem, kde cetas
se nachází dříve vytvořený kontejner úložiště.
Poznámka:
Formát Delta se v současné době podporuje jenom pro čtení.
-- Credential to access the S3-compatible object storage
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = '<accesskeyid>:<secretkeyid>'
GO
-- S3-compatible object storage data source
CREATE EXTERNAL DATA SOURCE s3_eds
WITH (
LOCATION = 's3://<ip>:<port>',
CREDENTIAL = s3_dsc
)
-- External File Format for PARQUET
CREATE EXTERNAL FILE FORMAT ParquetFileFormat
WITH (FORMAT_TYPE = PARQUET);
GO
CREATE EXTERNAL TABLE ext_sales
WITH (
LOCATION = '/cetas/sales.parquet',
DATA_SOURCE = s3_eds,
FILE_FORMAT = ParquetFileFormat
) AS
SELECT *
FROM AdventureWorks2022.[Sales].[SalesOrderDetail];
GO
E. Použití PŘÍKAZU CREATE EXTERNAL TABLE AS SELECT z tabulky Delta k parquet
platí pro: SQL Server 2022 (16.x)
Následující příklad vytvoří novou externí tabulku s názvem Delta_to_Parquet
, která používá delta table typ dat umístěný v úložišti s3_delta
objektů kompatibilní s S3 a zapíše výsledek do jiného zdroje dat pojmenovaného s3_parquet
jako soubor parquet. V tomto příkladu se používá příkaz OPENROWSET. Je nutné povolit možnost konfigurace exportu polybase .
-- External File Format for PARQUET
CREATE EXTERNAL FILE FORMAT ParquetFileFormat
WITH (FORMAT_TYPE = PARQUET);
GO
CREATE EXTERNAL TABLE Delta_to_Parquet
WITH (
LOCATION = '/backup/sales.parquet',
DATA_SOURCE = s3_parquet,
FILE_FORMAT = ParquetFileFormat
) AS
SELECT *
FROM OPENROWSET(BULK '/delta/sales_fy22/', FORMAT = 'DELTA', DATA_SOURCE = 's3_delta') AS [r];
GO
F. Použití PŘÍKAZU CREATE EXTERNAL TABLE AS SELECT se zobrazením jako zdrojem
Platí pro: Bezserverové fondy SQL azure Synapse Analytics a vyhrazené fondy SQL
Následující příklad použijte jako šablonu pro zápis CETAS s uživatelem definovaným zobrazením jako zdrojem pomocí spravované identity pro ověřování a abfs:
koncový bod:
CREATE DATABASE [<mydatabase>];
GO
USE [<mydatabase>];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO
CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
FORMAT_TYPE = PARQUET,
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO
CREATE EXTERNAL DATA SOURCE [SynapseSQLwriteable] WITH (
LOCATION = 'abfs[s]://<file_system>@<account_name>.dfs.core.windows.net/<path>/<file_name>',
CREDENTIAL = [WorkspaceIdentity]
);
GO
CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
LOCATION = '<myoutputsubfolder>/',
DATA_SOURCE = [SynapseSQLwriteable],
FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO
G. Použití PŘÍKAZU CREATE EXTERNAL TABLE AS SELECT se zobrazením jako zdrojem
Platí pro: Bezserverové fondy SQL azure Synapse Analytics a vyhrazené fondy SQL
V tomto příkladu vidíme příklad kódu šablony pro zápis CETAS s uživatelem definovaným zobrazením jako zdrojem, použití spravované identity jako ověřování a https:
.
CREATE DATABASE [<mydatabase>];
GO
USE [<mydatabase>];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO
CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
FORMAT_TYPE = PARQUET,
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO
CREATE EXTERNAL DATA SOURCE [SynapseSQLwriteable] WITH (
LOCATION = 'https://<mystoageaccount>.dfs.core.windows.net/<mycontainer>/<mybaseoutputfolderpath>',
CREDENTIAL = [WorkspaceIdentity]
);
GO
CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
LOCATION = '<myoutputsubfolder>/',
DATA_SOURCE = [SynapseSQLwriteable],
FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO
Další kroky
platí pro:azure SQL Managed Instance
Vytvoří externí tabulku a pak paralelně exportuje výsledky příkazu Transact-SQL SELECT.
K dokončení následujících úkolů můžete použít CREATE EXTERNAL TABLE AS SELECT
(CETAS):
- Vytvořte externí tabulku nad soubory Parquet nebo CSV ve službě Azure Blob Storage nebo Azure Data Lake Storage (ADLS) Gen2.
- Výsledky příkazu T-SQL SELECT exportujte paralelně do vytvořené externí tabulky.
- Další možnosti virtualizace dat služby Azure SQL Managed Instance najdete v tématu Virtualizace dat pomocí služby Azure SQL Managed Instance.
Poznámka:
Tento obsah platí jenom pro spravovanou instanci Azure SQL. U jiných platforem zvolte v rozevíracím selektoru příslušnou verzi CREATE EXTERNAL TABLE AS SELECT .
Syntaxe
CREATE EXTERNAL TABLE [ [database_name . [ schema_name ] . ] | schema_name . ] table_name
WITH (
LOCATION = 'path_to_folder/',
DATA_SOURCE = external_data_source_name,
FILE_FORMAT = external_file_format_name
[, PARTITION ( column_name [ , ...n ] ) ]
)
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Argumenty
[ [ database_name . [ schema_name ] . ] | schema_name . ] table_name
Název tabulky, který se má vytvořit, je jedna až třídílná. U externí tabulky jsou uložena pouze metadata tabulky. Žádná skutečná data se nepřesouvají ani neukládají.
LOCATION = 'path_to_folder'
Určuje, kam se mají zapisovat výsledky příkazu SELECT na externí zdroj dat. Kořenová složka je umístění dat zadané v externím zdroji dat. UMÍSTĚNÍ musí odkazovat na složku a mít koncovou /
. Příklad: aggregated_data/
.
Cílová složka pro CETAS musí být prázdná. Pokud cesta a složka ještě neexistují, vytvoří se automaticky.
DATA_SOURCE = external_data_source_name
Určuje název objektu externího zdroje dat, který obsahuje umístění, kam budou externí data uložena. Chcete-li vytvořit externí zdroj dat, použijte příkaz CREATE EXTERNAL DATA SOURCE (Transact-SQL).
FILE_FORMAT = external_file_format_name
Určuje název objektu formátu externího souboru, který obsahuje formát externího datového souboru. Chcete-li vytvořit formát externího souboru, použijte příkaz CREATE EXTERNAL FILE FORMAT (Transact-SQL). V současné době se podporují pouze formáty externích souborů s FORMAT_TYPE=PARQUET a FORMAT_TYPE=DELIMITEDTEXT. Komprese GZip pro formát DELIMITEDTEXT není podporována.
[, PARTITION ( název sloupce [ , ... n ] ) ]
Rozdělí výstupní data do několika cest k souborům parquet. Dělení probíhá podle zadaných sloupců (column_name
), které odpovídají zástupným znakům (*) v UMÍSTĚNÍ s příslušným sloupcem dělení. Počet sloupců v části PARTITION musí odpovídat počtu zástupných znaků v umístění. Musí existovat alespoň jeden sloupec, který se nepoužívá k dělení.
WITH <common_table_expression>
Určuje dočasnou pojmenovanou sadu výsledků označovanou jako běžný výraz tabulky (CTE). Další informace najdete v tématu WITH common_table_expression (Transact-SQL).
SELECT <select_criteria>
Naplní novou tabulku výsledky příkazu SELECT. select_criteria je tělo příkazu SELECT, které určuje, která data se mají zkopírovat do nové tabulky. Informace o příkazech SELECT naleznete v tématu SELECT (Transact-SQL).
Poznámka:
Klauzule ORDER BY v select není pro CETAS podporovaná.
Povolení
Oprávnění v úložišti
Musíte mít oprávnění k výpisu obsahu složky a zapisovat do cesty UMÍSTĚNÍ, aby CETAS fungovala.
Podporované metody ověřování jsou spravovaná identita nebo token sdíleného přístupového podpisu (SAS).
- Pokud pro ověřování používáte spravovanou identitu, ujistěte se, že instanční objekt spravované instance SQL má v cílovém kontejneru roli Přispěvatel dat objektů blob služby Storage .
- Pokud používáte token SAS, vyžadují se oprávnění ke čtení, zápisu a výpisu .
- Pro Azure Blog Storage musí být zaškrtnuté
Allowed Services
políčko :Blob
pro vygenerování tokenu SAS. - U Azure Data Lake Gen2 musí být zaškrtnuté
políčko a < a0 />, aby se vygeneroval token SAS.
Spravovaná identita přiřazená uživatelem se nepodporuje. Ověřování předávání Microsoft Entra se nepodporuje. Microsoft Entra ID je (dříve Azure Active Directory).
Oprávnění ve spravované instanci SQL
Ke spuštění tohoto příkazu potřebuje uživatel databáze všechna tato oprávnění nebo členství:
- Oprávnění ALTER SCHEMA pro místní schéma, které bude obsahovat novou tabulku nebo členství v db_ddladmin pevné databázové roli.
- OPRÁVNĚNÍ CREATE TABLE nebo členství v db_ddladmin pevné databázové roli.
- Oprávnění SELECT pro všechny objekty odkazované v select_criteria.
Přihlášení potřebuje všechna tato oprávnění:
- SPRÁVA HROMADNÝCH OPERACÍ
- ZMĚNIT JAKÝKOLIV EXTERNÍ ZDROJ DAT
- ZMĚNIT JAKÝKOLI EXTERNÍ FORMÁT SOUBORU
Důležité
Oprávnění ALTER ANY EXTERNAL DATA SOURCE uděluje všem objektům objektu externího zdroje dat možnost vytvářet a upravovat všechny objekty externího zdroje dat, takže také umožňuje přístup ke všem přihlašovacím údajům v databázi s vymezeným oborem databáze. Toto oprávnění musí být považováno za vysoce privilegované a musí být uděleno pouze důvěryhodným objektům zabezpečení v systému.
Podporované datové typy
CETAS ukládá sady výsledků s následujícími datovými typy SQL:
- binární
- varbinary
- uklízečka
- varchar
- nchar
- nvarchar
- SmallDateTime
- datum
- Datum a čas
- datetime2
- datetimeoffset
- Čas
- desetinné číslo
- číselný
- plout
- opravdový
- bigint
- tinyint
- smallint
- int (integer)
- bigint
- trochu
- peníze
- drobné peníze
Poznámka:
S CETAS nelze použít LOBy větší než 1 MB.
Limity a omezení
-
CREATE EXTERNAL TABLE AS SELECT
(CETAS) pro službu Azure SQL Managed Instance je ve výchozím nastavení zakázaná. Další informace najdete v další části Zakázané ve výchozím nastavení. - Další informace o omezeních nebo známých problémech s virtualizací dat ve službě Azure SQL Managed Instance najdete v tématu Omezení a známé problémy.
Vzhledem k tomu, že data externí tabulky se nacházejí mimo databázi, operace zálohování a obnovení fungují pouze s daty uloženými v databázi. V důsledku toho se zálohuje a obnovuje pouze metadata.
Databáze při obnovování zálohy databáze obsahující externí tabulku neověřuje připojení k externímu zdroji dat. Pokud původní zdroj není přístupný, obnovení metadat externí tabulky je stále úspěšné, ale operace SELECT u externí tabulky selžou.
Databáze nezaručuje konzistenci dat mezi databází a externími daty. Vy, zákazník, zodpovídáte výhradně za zachování konzistence mezi externími daty a databází.
Operace jazyka DML (Data Manipulat Language) nejsou u externích tabulek podporované. Nemůžete například použít příkazy Transact-SQL update, insert nebo delete Transact-SQL k úpravě externích dat.
OPERACE CREATE TABLE, DROP TABLE, CREATE STATISTICS, DROP STATISTICS, CREATE VIEW a DROP VIEW jsou jediné operace jazyka DDL (Data Definition Language) povolené u externích tabulek.
Externí tabulky nelze vytvořit v umístění, kde aktuálně máte data. Pokud chcete znovu použít umístění, které bylo použito k ukládání dat, musí být umístění v ADLS ručně odstraněno.
FUNKCE SET ROWCOUNT (Transact-SQL) nemá žádný vliv na FUNKCI CREATE EXTERNAL TABLE AS SELECT. Chcete-li dosáhnout podobného chování, použijte top (Transact-SQL).
Projděte si omezení názvů souborů a odkazů na kontejnery, objekty blob a metadata .
Typy úložiště
Soubory se dají ukládat ve službě Azure Data Lake Storage Gen2 nebo Azure Blob Storage. K dotazování souborů potřebujete zadat umístění v určitém formátu a použít předponu typu umístění odpovídající typu externího zdroje a koncového bodu/protokolu, například následující příklady:
--Blob Storage endpoint
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet
--Data Lake endpoint
adls://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet
Důležité
Zadanou předponu typu umístění se používá k výběru optimálního protokolu pro komunikaci a k využití všech pokročilých funkcí nabízených konkrétním typem úložiště.
Použití obecné https://
předpony je zakázáno. Vždy používejte předpony specifické pro koncový bod.
Zakázáno ve výchozím nastavení
FUNKCE CREATE EXTERNAL TABLE AS SELECT (CETAS) umožňuje exportovat data z vaší spravované instance SQL do externího účtu úložiště, takže s těmito možnostmi může dojít k riziku exfiltrace dat. Proto je funkce CETAS ve výchozím nastavení zakázaná pro službu Azure SQL Managed Instance.
Povolení CETAS
CETAS pro Azure SQL Managed Instance je možné povolit jenom prostřednictvím metody, která vyžaduje zvýšená oprávnění Azure a není možné ji povolit přes T-SQL. Kvůli riziku neoprávněného exfiltrace dat nelze funkci CETAS povolit prostřednictvím sp_configure
uložené procedury T-SQL, ale místo toho vyžaduje akci uživatele mimo spravovanou instanci SQL.
Oprávnění k povolení CETAS
Pokud chcete povolit prostřednictvím Azure PowerShellu, musí mít uživatel, který spouští příkaz, role Přispěvatel nebo SQL Security Manager Azure RBAC pro vaši spravovanou instanci SQL.
Pro tuto akci je možné vytvořit také vlastní roli, která vyžaduje akci čtení a zápisuMicrosoft.Sql/managedInstances/serverConfigurationOptions
.
Metody povolení CETAS
Aby bylo možné vyvolat příkazy PowerShellu na počítači, musí být místně nainstalován balíček Az verze 9.7.0 nebo novější. Nebo zvažte použití Azure Cloud Shellu ke spuštění Azure PowerShellu na shell.azure.com.
Nejprve se přihlaste k Azure a nastavte správný kontext pro vaše předplatné:
Login-AzAccount
$SubscriptionID = "<YourSubscriptionIDHERE>"
Select-AzSubscription -SubscriptionName $SubscriptionID
Pokud chcete spravovat možnost allowPolybaseExport
konfigurace serveru, upravte následující skripty PowerShellu na název vaší předplatného a spravované instance SQL a spusťte příkazy. Další informace naleznete v tématu Set-AzSqlServerConfigurationOption a Get-AzSqlServerConfigurationOption.
# Enable ServerConfigurationOption with name "allowPolybaseExport"
Set-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport" -Value 1
Zakázání možnosti konfigurace serveru allowPolybaseExport:
# Disable ServerConfigurationOption with name "allowPolybaseExport"
Set-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport" -Value 0
Získání aktuální hodnoty možnosti konfigurace serveru allowPolybaseExport:
# Get ServerConfigurationOptions with name "allowPolybaseExport"
Get-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport"
Ověření stavu CETAS
Kdykoli můžete zkontrolovat aktuální stav možnosti konfigurace CETAS.
Připojte se ke spravované instanci SQL. Spusťte následující příkaz T-SQL a sledujte value
sloupec odpovědi. Po dokončení změny konfigurace serveru by se výsledky tohoto dotazu měly shodovat s požadovaným nastavením.
SELECT [name], [value] FROM sys.configurations WHERE name ='allow polybase export';
Řešení problémů
Další kroky pro řešení potíží s virtualizací dat ve službě Azure SQL Managed Instance najdete v tématu Řešení potíží. Zpracování chyb a běžné chybové zprávy pro CETAS ve službě Azure SQL Managed Instance následuje.
Zpracování chyb
Při CREATE EXTERNAL TABLE AS SELECT
exportu dat do souboru s oddělovači textu neexistuje žádný soubor zamítnutí pro řádky, které se nepodaří exportovat.
Při vytváření externí tabulky se databáze pokusí připojit k externímu umístění. Pokud připojení selže, příkaz selže a externí tabulka se nevytvořila. Může trvat minutu nebo déle, než se příkaz nezdaří, protože databáze opakuje připojení alespoň třikrát.
Běžné chybové zprávy
Tyto běžné chybové zprávy obsahují rychlé vysvětlení CETAS pro Azure SQL Managed Instance.
Určení umístění, které již v úložišti existuje.
Řešení: Vymažte umístění úložiště (včetně snímku) nebo změňte parametr umístění v dotazu.
Ukázková chybová zpráva:
Msg 15842: Cannot create external table. External table location already exists.
Hodnoty sloupců formátované pomocí objektů JSON
Řešení: Převede sloupec hodnot na jeden sloupec VARCHAR nebo NVARCHAR nebo sadu sloupců s explicitně definovanými typy.
Ukázková chybová zpráva:
Msg 16549: Values in column value are formatted as JSON objects and cannot be written using CREATE EXTERNAL TABLE AS SELECT.
Parametr umístění je neplatný (například více
//
).Řešení: Oprava parametru umístění
Ukázková chybová zpráva:
Msg 46504: External option 'LOCATION' is not valid. Ensure that the length and range are appropriate.
Chybí jedna z požadovaných možností (DATA_SOURCE, FILE_FORMAT, UMÍSTĚNÍ).
Řešení: Přidejte chybějící parametr do dotazu CETAS.
Ukázková chybová zpráva:
Msg 46505: Missing required external DDL option 'FILE_FORMAT'
Problémy s přístupem (neplatné přihlašovací údaje, vypršení platnosti přihlašovacích údajů nebo přihlašovací údaje s nedostatečnými oprávněními) Alternativní možností je neplatná cesta, kdy spravovaná instance SQL obdržela z úložiště chybu 404.
Řešení: Ověřte platnost přihlašovacích údajů a oprávnění. Případně ověřte platnost cesty a existuje úložiště. Použijte cestu
adls://<container>@<storage_account>.blob.core.windows.net/<path>/
URL .Ukázková chybová zpráva:
Msg 15883: Access check for '<Read/Write>' operation against '<Storage>' failed with HRESULT = '0x...'
Část umístění DATA_SOURCE obsahuje zástupné kóty.
Řešení: Odebrání zástupných znaků z umístění
Ukázková chybová zpráva:
Msg 16576: Location provided by DATA_SOURCE '<data source name>' cannot contain any wildcards.
Počet zástupných znaků v parametru LOCATION a počtu dělených sloupců se neshoduje.
Řešení: Zajistěte stejný počet zástupných znaků v umístění jako sloupce oddílů.
Ukázková chybová zpráva:
Msg 16577: Number of wildcards in LOCATION must match the number of columns in PARTITION clause.
Název sloupce v klauzuli PARTITION neodpovídá žádným sloupcům v seznamu.
Řešení: Ujistěte se, že jsou sloupce v oddílu platné.
Ukázková chybová zpráva:
Msg 16578: The column name '<column name>' specified in the PARTITION option does not match any column specified in the column list
Sloupec zadaný více než jednou v seznamu PARTITION.
Řešení: Ujistěte se, že sloupce v klauzuli PARTITION jsou jedinečné.
Ukázková chybová zpráva:
Msg 16579: A column has been specified more than once in the PARTITION list. Column '<column name>' is specified more than once.
Sloupec byl v seznamu PARTITION zadán vícekrát nebo neodpovídá žádným sloupcům ze seznamu SELECT.
Řešení: Ujistěte se, že v seznamu oddílů nejsou žádné duplicity a sloupce oddílů existují v části SELECT.
Ukázkové chybové zprávy:
Msg 11569: Column <column name> has been specified more than once in the partition columns list. Please try again with a valid parameter.
neboMsg 11570: Column <column name> specified in the partition columns list does not match any columns in SELECT clause. Please try again with a valid parameter.
Použití všech sloupců v seznamu PARTITION
Řešení: Nejméně jeden ze sloupců z části SELECT nesmí být v části PARTITION v dotazu.
Ukázková chybová zpráva:
Msg 11571: All output columns in DATA_EXPORT query are declared as PARTITION columns. DATA_EXPORT query requires at least one column to export.
Funkce je zakázaná.
Řešení: Povolte tuto funkci pomocí části Zakázáno ve výchozím nastavení v tomto článku.
Ukázková chybová zpráva:
Msg 46552: Writing into an external table is disabled. See 'https://go.microsoft.com/fwlink/?linkid=2201073' for more information
Uzamčení
Přebírá sdílený zámek objektu SCHEMARESOLUTION.
Příklady
A. Použití CETAS se zobrazením k vytvoření externí tabulky pomocí spravované identity
Tento příklad poskytuje kód pro psaní CETAS se zobrazením jako zdrojem pomocí ověřování spravované systémem.
CREATE DATABASE [<mydatabase>];
GO
USE [<mydatabase>];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO
CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
FORMAT_TYPE = PARQUET,
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO
CREATE EXTERNAL DATA SOURCE [SQLwriteable] WITH (
LOCATION = 'adls://container@mystorageaccount.blob.core.windows.net/mybaseoutputfolderpath',
CREDENTIAL = [WorkspaceIdentity]
);
GO
CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
LOCATION = '<myoutputsubfolder>/',
DATA_SOURCE = [SQLwriteable],
FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO
B. Použití CETAS se zobrazením k vytvoření externí tabulky s ověřováním SAS
Tento příklad poskytuje kód pro zápis CETAS se zobrazením jako zdrojem pomocí tokenu SAS jako ověřování.
CREATE DATABASE [<mydatabase>];
GO
USE [<mydatabase>];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
CREATE DATABASE SCOPED CREDENTIAL SAS_token
WITH
IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>' ;
GO
CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
FORMAT_TYPE = PARQUET,
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO
CREATE EXTERNAL DATA SOURCE [SQLwriteable] WITH (
LOCATION = 'adls://container@mystorageaccount.blob.core.windows.net/mybaseoutputfolderpath',
CREDENTIAL = [SAS_token]
);
GO
CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
LOCATION = '<myoutputsubfolder>/',
DATA_SOURCE = [SQLwriteable],
FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO
C. Vytvoření externí tabulky do jednoho souboru parquet v úložišti
Následující dva příklady ukazují, jak přesunout některá data z místní tabulky do externí tabulky uložené jako soubory parquet v kontejneru azure Blob Storage. Jsou navržené tak, aby fungovaly s AdventureWorks2022
databází. Tento příklad ukazuje vytvoření externí tabulky jako jednoho souboru parquet, kde další příklad ukazuje, jak vytvořit externí tabulku a rozdělit ji do více složek se soubory parquet.
Následující příklad funguje s využitím spravované identity pro ověřování. Proto se ujistěte, že instanční objekt spravované instance Azure SQL má ve vašem kontejneru Azure Blob Storage roli Přispěvatel dat objektů blob služby Storage. Alternativně můžete upravit příklad a použít tokeny sdíleného přístupového tajného klíče (SAS) pro ověřování.
Následující ukázka vytvoří externí tabulku do jednoho souboru parquet ve službě Azure Blob Storage a vyberete ji z SalesOrderHeader
tabulky pro objednávky starší než 1. ledna 2014:
--Example 1: Creating an external table into a single parquet file on the storage, selecting from SalesOrderHeader table for orders older than 1-Jan-2014:
USE [AdventureWorks2022]
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Strong Password';
GO
CREATE DATABASE SCOPED CREDENTIAL [CETASCredential]
WITH IDENTITY = 'managed identity';
GO
CREATE EXTERNAL DATA SOURCE [CETASExternalDataSource]
WITH (
LOCATION = 'abs://container@storageaccount.blob.core.windows.net',
CREDENTIAL = [CETASCredential] );
GO
CREATE EXTERNAL FILE FORMAT [CETASFileFormat]
WITH(
FORMAT_TYPE=PARQUET,
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO
-- Count how many rows we plan to offload
SELECT COUNT(*) FROM [AdventureWorks2022].[Sales].[SalesOrderHeader] WHERE
OrderDate < '2013-12-31';
-- CETAS write to a single file, archive all data older than 1-Jan-2014:
CREATE EXTERNAL TABLE SalesOrdersExternal
WITH (
LOCATION = 'SalesOrders/',
DATA_SOURCE = [CETASExternalDataSource],
FILE_FORMAT = [CETASFileFormat])
AS
SELECT
*
FROM
[AdventureWorks2022].[Sales].[SalesOrderHeader]
WHERE
OrderDate < '2013-12-31';
-- you can query the newly created external table
SELECT COUNT (*) FROM SalesOrdersExternal;
D. Vytvoření dělené externí tabulky do několika souborů parquet uložených ve stromu složek
Tento příklad vychází z předchozího příkladu, který ukazuje, jak vytvořit externí tabulku a rozdělit ji do více složek pomocí souborů parquet. Pokud je vaše datová sada velká, můžete pomocí dělených tabulek získat výhody výkonu.
Vytvořte externí tabulku z SalesOrderHeader
dat pomocí kroků z příkladu B, ale rozdělte externí tabulku podle OrderDate
roku a měsíce. Při dotazování na dělené externí tabulky můžeme využít odstranění oddílů kvůli výkonu.
--CETAS write to a folder hierarchy (partitioned table):
CREATE EXTERNAL TABLE SalesOrdersExternalPartitioned
WITH (
LOCATION = 'PartitionedOrders/year=*/month=*/',
DATA_SOURCE = CETASExternalDataSource,
FILE_FORMAT = CETASFileFormat,
--year and month will correspond to the two respective wildcards in folder path
PARTITION (
[Year],
[Month]
)
)
AS
SELECT
*,
YEAR(OrderDate) AS [Year],
MONTH(OrderDate) AS [Month]
FROM [AdventureWorks2022].[Sales].[SalesOrderHeader]
WHERE
OrderDate < '2013-12-31';
GO
-- you can query the newly created partitioned external table
SELECT COUNT (*) FROM SalesOrdersExternalPartitioned;