如何按周计划将Azure Synapse SQL的T-SQL查询结果导出到Blob存储或FTP
Azure Synapse SQL 按周导出CSV操作指南
导出到Azure Blob/ADLS Gen2(原生支持)
使用Synapse原生支持的CETAS(CREATE EXTERNAL TABLE AS SELECT)语法即可直接将T-SQL查询结果导出为CSV到目标存储,无需额外第三方工具。
操作步骤
- 创建数据库范围凭据(用于验证存储访问权限)
CREATE DATABASE SCOPED CREDENTIAL StorageCred WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '你的存储账户SAS令牌/访问密钥';
- 创建指向目标存储的外部数据源
CREATE EXTERNAL DATA SOURCE TargetStorage WITH ( LOCATION = 'abfss://<目标容器名>@<存储账户名>.dfs.core.windows.net/导出目录前缀', CREDENTIAL = StorageCred );
- 定义CSV格式的外部文件格式
CREATE EXTERNAL FILE FORMAT CSV_Export_Format WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', STRING_DELIMITER = '"', ENCODING = 'UTF8', FIRST_ROW = 1 -- 无服务器SQL池可开启导出表头,专用SQL池可通过UNION拼接表头行实现 ) );
- 执行CETAS语句导出查询结果
-- 每次导出前先删除旧的外部表(仅删除元数据,不会删除存储内的文件) IF EXISTS (SELECT * FROM sys.external_tables WHERE name = 'Weekly_Export_Temp') DROP EXTERNAL TABLE Weekly_Export_Temp GO CREATE EXTERNAL TABLE Weekly_Export_Temp WITH ( LOCATION = CONCAT('/weekly-export/', FORMAT(GETDATE(), 'yyyyMMdd')), -- 按日期生成子目录避免覆盖 DATA_SOURCE = TargetStorage, FILE_FORMAT = CSV_Export_Format ) AS -- 替换为你实际需要执行的T-SQL查询 SELECT col1, col2, create_time FROM your_business_table WHERE 过滤条件;
- 配置周计划调度
在Synapse Studio的「集成」模块新建管道,添加「脚本」活动并填入上述SQL逻辑,给管道绑定计划触发器,设置执行周期为每周、指定执行时间即可。
导出到FTP服务器
Synapse原生不支持直接写入FTP,可通过两步流实现:
- 按上述步骤先将CSV导出到中间Blob存储
- 在同一管道内添加「复制活动」,源选择刚导出的Blob存储CSV文件,目标选择FTP连接器并配置FTP的地址、账号、密码参数
- 触发器配置和上述一致,设置为每周周期执行即可
注意事项
- 存储SAS令牌建议设置足够长的过期时间,避免调度任务中途验证失败
- 导出路径建议按日期生成唯一目录,便于历史数据回溯
- 专用SQL池如需导出表头,可在查询中通过
UNION ALL拼接表头行和业务数据行实现
内容的提问来源于stack exchange,提问作者Arvind A
相关产品推荐
相关产品推荐

