在 Azure Synapse Analytics 中使用无服务器 SQL 池将查询结果存储到存储

在本文中,你将了解如何使用无服务器 SQL 池将查询结果存储到存储。

先决条件

第一步是创建将在其中执行查询的数据库。 然后通过对该数据库执行安装脚本来初始化这些对象。 此安装脚本将创建数据源、数据库范围的凭据和用于读取这些示例中数据的外部文件格式。

按照本文中的说明创建数据源、数据库范围的凭据以及用于将数据写入到输出存储的外部文件格式。

创建外部表作为选择

可以使用 CREATE EXTERNAL TABLE AS SELECT (CETAS) 语句将查询结果存储到存储。

备注

更改查询中的以下值以反映你的环境:

  • mydbname - 将其更改为创建的数据库的名称
  • storage-account-sas - 用于要写入结果的存储帐户的共享访问签名
  • your-storage-account-name - 您希望写入结果的存储帐户名称(请确保有一个名为“csv”的容器,或者在此处更改容器的名称)
USE [mydbname];
GO

CREATE DATABASE SCOPED CREDENTIAL [SasTokenWrite]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = 'storage-account-sas';
GO

CREATE EXTERNAL DATA SOURCE [MyDataSource] WITH (
    LOCATION = 'https://your-storage-account-name.blob.core.chinacloudapi.cn/csv', CREDENTIAL = [SasTokenWrite]
);
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL TABLE [dbo].[PopulationCETAS] WITH (
        LOCATION = 'populationParquet/',
        DATA_SOURCE = [MyDataSource],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT
    *
FROM
    OPENROWSET(
        BULK 'csv/population-unix/population.csv',
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT = 'CSV', PARSER_VERSION = '2.0'
    ) WITH (
        CountryCode varchar(4),
        CountryName varchar(64),
        Year int,
        PopulationCount int
    ) AS r;

备注

必须修改此脚本,并更改目标位置以再次执行。 无法在已有某些数据的位置上创建外部表。

使用外部表

可以像使用常规外部表一样,使用通过 CETAS 创建的外部表。

备注

更改查询中的第一行(即 [mydbname]),以便使用你创建的数据库。

USE [mydbname];
GO

SELECT
    CountryName, PopulationCount
FROM PopulationCETAS
WHERE
    [Year] = 2019
ORDER BY
    [PopulationCount] DESC;

注解

存储结果后,无法修改外部表中的数据。 不能重复此脚本,因为 CETAS 不会覆盖在上一次执行中创建的基础数据。

支持的输出类型目前只有 Parquet 和 CSV。

若要详细了解如何查询不同的文件类型,请参阅以下文章:查询单个 CSV 文件查询 Parquet 文件查询 JSON 文件