如何通过管道在Azure Synapse无服务器SQL池从ADLSGen2创建表/视图?
在Azure Synapse无服务器SQL池(db_mcm)中通过数据管道从ADLS Gen2 CSV创建视图/外部表
前置准备
- 确保ADLS Gen2存储账户已授予Synapse无服务器SQL池访问权限:可通过工作区托管身份配置
Storage Blob Data Reader角色,或使用SAS密钥/账户密钥。 - 确认CSV文件的核心属性:分隔符、是否含表头、字段类型、编码等。
方法一:通过数据管道创建视图
- 打开Synapse Studio,进入集成模块,新建数据管道。
- 在画布中添加Script活动:
- 在活动的设置标签页,选择关联到
db_mcm所在的无服务器SQL池连接。 - 在脚本编辑器中输入创建/替换视图的SQL,示例如下:
CREATE OR ALTER VIEW dbo.Customer_View AS SELECT * FROM OPENROWSET( BULK 'abfss://your-container@your-adls-account.dfs.core.windows.net/csv-folder/*.csv', FORMAT = 'CSV', FIRSTROW = 2, -- 若CSV含表头则设为2,无表头设为1 FIELDTERMINATOR = ',', -- 替换为你的CSV分隔符 ROWTERMINATOR = '\n' ) WITH ( CustomerID VARCHAR(20), CustomerName NVARCHAR(100), RegisterDate DATE ) AS csv_result - 替换存储路径、列定义、格式参数为实际值。
- 在活动的设置标签页,选择关联到
- 保存管道并触发运行,完成后即可在
数据->工作区->SQL数据库->db_mcm下查看创建的视图。
方法二:通过数据管道创建外部表
外部表适用于结构固定、需重复访问的场景,步骤如下:
- 新建数据管道,添加Script活动并关联目标无服务器SQL池。
- 在脚本编辑器中执行以下三步操作(按需调整参数):
-- 1. 创建外部数据源(若未存在) IF NOT EXISTS (SELECT * FROM sys.external_data_sources WHERE name = 'ADLS_CSV_Source') CREATE EXTERNAL DATA SOURCE ADLS_CSV_Source WITH ( LOCATION = 'abfss://your-container@your-adls-account.dfs.core.windows.net/csv-folder/', TYPE = HADOOP ); -- 2. 创建外部文件格式(若未存在) IF NOT EXISTS (SELECT * FROM sys.external_file_formats WHERE name = 'Standard_CSV_Format') CREATE EXTERNAL FILE FORMAT Standard_CSV_Format WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', FIRST_ROW = 2, QUOTE_CHAR = '"', -- 若CSV字段含引号需添加 USE_TYPE_DEFAULT = FALSE ) ); -- 3. 创建外部表 CREATE OR ALTER EXTERNAL TABLE dbo.Customer_ExternalTable ( CustomerID VARCHAR(20), CustomerName NVARCHAR(100), RegisterDate DATE ) WITH ( LOCATION = '*.csv', -- 指向文件夹下所有CSV文件 DATA_SOURCE = ADLS_CSV_Source, FILE_FORMAT = Standard_CSV_Format ); - 保存并运行管道,完成后在
db_mcm中即可看到该外部表。
关键注意事项
- 若使用托管身份,需确保Synapse工作区的托管身份已在ADLS Gen2存储账户的目标容器/文件夹上配置对应权限。
- OPENROWSET和外部表均支持通配符(如
*.csv),可批量读取同目录下的多个CSV文件。 - 若CSV存在换行字段等特殊格式,需在文件格式中调整
ROWTERMINATOR等参数适配。
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

