如何将Azure Synapse的SQL查询结果保存为分块压缩云存储文件
Azure Synapse 实现类似 Snowflake 的查询结果导出功能
Synapse 完全支持将 SQL 查询结果导出到 Azure Blob Storage 或 Azure Data Lake Storage (ADLS) Gen2,且能满足分块存储、压缩、自定义文件大小的需求,对应 Snowflake 的 COPY INTO @stage 和 GET 操作,主要通过以下方式实现:
1. Synapse SQL 池(专用):原生 COPY INTO 语句
用法和 Snowflake 高度相似,直接将查询结果导出到云存储:
语法示例
COPY INTO 'https://<存储账户名>.blob.core.windows.net/<容器名>/<存储路径>' FROM (SELECT * FROM 目标表 WHERE 查询条件) WITH ( FILE_TYPE = 'CSV', COMPRESSION = 'GZIP', -- 支持 GZIP、DEFLATE、BROTLI 等压缩格式 MAX_FILE_SIZE = 33554432, -- 设置单文件最大字节数,32MB 对应值为 33554432 ROWTERMINATOR = '0x0A', FIELDTERMINATOR = ',', FIRST_ROW = 1, CREDENTIAL = (IDENTITY = 'Shared Access Signature', SECRET = '<你的SAS令牌>') )
关键参数说明
MAX_FILE_SIZE:控制单文件大小,Synapse 会自动将结果分割为多个符合要求的文件COMPRESSION:指定压缩格式,直接生成压缩后的 CSV 文件CREDENTIAL:支持 SAS 令牌、服务主体、托管标识三种方式授权访问存储
2. Synapse 无服务器 SQL 池:CETAS 语句
如果使用无服务器池,推荐用 CREATE EXTERNAL TABLE AS SELECT (CETAS) 实现持久化导出,同样支持分块和压缩:
步骤示例
首先创建外部数据源和文件格式:
-- 创建外部数据源 CREATE EXTERNAL DATA SOURCE 存储数据源 WITH ( LOCATION = 'https://<存储账户名>.dfs.core.windows.net/<容器名>', CREDENTIAL = 存储访问凭据 ); -- 创建GZIP压缩的CSV文件格式 CREATE EXTERNAL FILE FORMAT CSV_GZIP格式 WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', ROW_TERMINATOR = '0x0A', FIRST_ROW = 1 ), DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec' );
然后执行CETAS导出查询结果:
CREATE EXTERNAL TABLE 外部导出表 WITH ( LOCATION = '/导出文件存储路径/', DATA_SOURCE = 存储数据源, FILE_FORMAT = CSV_GZIP格式 ) AS SELECT * FROM 目标表 WHERE 查询条件;
CETAS 会自动将结果分割为多份文件,可通过调整查询并行度控制文件数量和大小。
3. 下载导出文件(对应 Snowflake GET)
Synapse 没有原生 SQL 命令用于下载,但可通过以下方式批量并行下载:
- Azure Portal 直接从 Blob/ADLS 界面下载
- Azure CLI:使用
az storage blob download-batch命令批量下载 - PowerShell:使用
Get-AzStorageBlobContent脚本批量获取 - Azure Storage Explorer:可视化工具批量选中下载
以上工具均支持并行处理多个分块文件,效果和 Snowflake GET 一致。
内容的提问来源于stack exchange,提问作者Wheezil
相关产品推荐
相关产品推荐

