您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

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 [ [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  
)
    AS <select_statement>  
[;]

<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>

参数

[ [ database_name . [ schema_name ] . ] | schema_name . ] table_name

要创建的表的一到三部分名称。 对于外部表,无服务器 SQL 池仅存储表元数据。 不会在无服务器 SQL 池中移动或存储任何实际数据。

LOCATION = 'path_to_folder'

在外部数据源上指定写入 SELECT 语句结果的位置。 根文件夹是外部数据源中指定的数据位置。 LOCATION 必须指向一个文件夹并具有尾随 /。 示例:aggregated_data/

DATA_SOURCE = external_data_source_name

指定外部数据源对象的名称,该对象包含外部数据的存储位置。 若要创建外部数据源,请使用 CREATE EXTERNAL DATA SOURCE (Transact-SQL)

FILE_FORMAT = external_file_format_name

指定包含外部数据文件格式的外部文件格式对象的名称。 若要创建外部文件格式,请使用 CREATE EXTERNAL FILE FORMAT (Transact-SQL)。 目前仅支持 FORMAT_TYPE=PARQUET 和 FORMAT_TYPE=DELIMITEDTEXT 的外部文件格式。 不支持 DELIMITEDTEXT 格式的 GZip 压缩。

WITH <common_table_expression>

指定临时命名的结果集,这些结果集称为公用表表达式 (CTE)。 有关详细信息,请参阅 WITH common_table_expression (Transact-SQL)

SELECT <select_criteria>

使用 SELECT 语句的结果填充新表。 select_criteria 是 SELECT 语句的主体,用于确定将哪些数据复制到新表中。 有关 SELECT 语句的信息,请参阅 SELECT (Transact-SQL)

备注

CETAS 的 SELECT 不支持 ORDER BY 子句。

权限

需要具有列出文件夹内容和向 LOCATION 文件夹写入内容的权限才能使用 CETAS。

示例

这些示例使用 CETAS 将按年份和州聚合的总人口保存到 population_ds 数据源中的 aggregated_data 文件夹。

此示例依赖于先前创建的凭据、数据源和外部文件格式。 请参阅外部表文档。 若要将查询结果保存到同一数据源中的其他文件夹,请更改 LOCATION 参数。

若要将结果保存到不同的存储帐户,请为 DATA_SOURCE 参数创建并使用一个不同的数据源。

备注

下面的示例使用公共 Azure 开放式数据存储帐户。 它是只读的。 若要执行这些查询,需要提供你具有写入权限的数据源。

-- 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.blob.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 可用于存储包含以下 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
  • uniqueidentifier

备注

大于 1MB 的 LOB 无法与 CETAS 一起使用。

后续步骤

尝试查询 Apache Spark for Azure Synapse 外部表