共用方式為


使用 Synapse SQL 的 CETAS

您可以在專用 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 資料類型的結果集:

  • binary
  • varbinary
  • char
  • varchar
  • nchar
  • nvarchar
  • smalldate
  • date
  • Datetime
  • datetime2
  • datetimeoffset
  • time
  • decimal
  • numeric
  • FLOAT
  • real
  • bigint
  • TINYINT
  • smallint
  • int
  • bigint
  • bit
  • money
  • smallmoney

注意

大於 1MB 的 LOB 無法與 CETAS 搭配使用。

後續步驟