Tip
Microsoft Fabric Data Warehouse 是一個企業規模的關聯式倉庫,建立在資料湖基礎上,具備未來準備架構、內建 AI 及新功能。 如果你是資料倉儲新手,建議先從Fabric Data Warehouse開始。 現有的 專用 SQL 工作負載可升級至 Fabric,以取得資料科學、即時分析與報告等多項新功能。
您可以在專用 SQL 集區或無伺服器 SQL 集區中使用 CREATE EXTERNAL TABLE AS SELECT (CETAS)來完成下列工作:
建立外部表格
平行匯出 Transact-SQL SELECT 語句的結果,以:
- Hadoop
- Azure 儲存體 Blob
- Azure Data Lake Storage Gen2
專用 SQL 集區中的 CETAS
如需了解獨立 SQL 集合的 CETAS 使用方式和語法,請參閱 CREATE EXTERNAL TABLE AS SELECT 一文。 此外,如需使用專用 SQL 集區 CTAS 的指引,請參閱 CREATE TABLE AS SELECT 一文。
無伺服器 SQL 集區中的 CETAS
使用無伺服器 SQL 集區時,CETAS 會用來建立外部數據表,並將查詢結果匯出至 Azure 儲存體 Blob 或 Azure Data Lake Storage Gen2。
如需完整的語法,請參閱 CREATE EXTERNAL TABLE AS SELECT (Transact-SQL)。
範例
這些範例使用 CETAS 依年份和州匯總總人口並將其儲存至 population_ds 數據源中的 aggregated_data 資料夾。
此範例依賴先前建立的認證、數據源和外部檔格式。 請參閱外部數據表檔。 若要將查詢結果儲存至相同數據源中的不同資料夾,請變更 LOCATION 自變數。
若要將結果儲存到不同的儲存帳戶,請建立並使用不同的資料來源作為DATA_SOURCE參數。
注意
下列範例會使用公用 Azure Open Data 儲存器帳戶。 它是唯讀的。 若要執行這些查詢,您必須提供您具有寫入許可權的數據源。
-- use CETAS to export select statement with OPENROWSET result to storage
CREATE EXTERNAL TABLE population_by_year_state
WITH (
LOCATION = 'aggregated_data/',
DATA_SOURCE = population_ds,
FILE_FORMAT = census_file_format
)
AS
SELECT decennialTime, stateName, SUM(population) AS population
FROM
OPENROWSET(BULK 'https://azureopendatastorage.dfs.core.windows.net/censusdatacontainer/release/us_population_county/year=*/*.parquet',
FORMAT='PARQUET') AS [r]
GROUP BY decennialTime, stateName
GO
-- you can query the newly created external table
SELECT * FROM population_by_year_state
下列範例會使用外部數據表作為 CETAS 的來源。 它依賴先前建立的認證、數據源、外部檔格式和外部數據表。 請參閱外部數據表檔。
-- use CETAS with select from external table
CREATE EXTERNAL TABLE population_by_year_state
WITH (
LOCATION = 'aggregated_data/',
DATA_SOURCE = population_ds,
FILE_FORMAT = census_file_format
)
AS
SELECT decennialTime, stateName, SUM(population) AS population
FROM census_external_table
GROUP BY decennialTime, stateName
GO
-- you can query the newly created external table
SELECT * FROM population_by_year_state
一般範例
在此範例中,我們可以看到使用檢視作為來源撰寫 CETAS 的範本程式代碼範例,並使用受控識別作為驗證。
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
支援的資料類型
CETAS 可用來儲存具有下列 SQL 資料類型的結果集:
- 二進位
- varbinary
- Char
- varchar
- nchar
- nvarchar
- smalldate
- 日期
- 日期時間
- datetime2
- datetimeoffset
- 時間
- 十進位
- 數值
- float
- 真實
- Bigint
- Tinyint
- smallint
- int
- Bigint
- 位元
- 錢
- smallmoney
注意
大於 1MB 的 LOB 無法與 CETAS 搭配使用。