如何通过SSIS包从SQL托管实例访问Azure文件存储
解决SSIS连接Azure文件存储获取CSV文件的方法
方法1:映射Azure文件存储为本地网络驱动器(适用于自托管SSIS运行环境)
- 在运行SSIS包的机器上,用Azure存储账户的密钥或SAS令牌映射网络驱动器:
- 打开管理员命令提示符,执行命令:
net use Z: \\<存储账户名>.file.core.windows.net\<文件共享名> /u:AZURE\<存储账户名> <存储账户密钥或SAS令牌> - 映射完成后,SSIS的平面文件连接管理器就能像访问本地C:/E:/盘一样,直接读取Z:盘下的CSV文件,无需修改原有包的逻辑。
- 打开管理员命令提示符,执行命令:
- 若使用Azure-SSIS集成运行时(IR),需要在IR的自定义配置里提前设置驱动器映射,或者用脚本任务动态执行映射命令。
方法2:用脚本任务+Azure存储SDK直接读取文件
- 在SSIS包中添加脚本任务,在脚本项目里安装NuGet包
Azure.Storage.Files.Shares - 编写C#代码实现文件读取:
- 初始化文件共享客户端:
string connStr = "你的Azure存储账户连接字符串"; string shareName = "你的文件共享名称"; ShareClient shareClient = new ShareClient(connStr, shareName); - 定位目标CSV文件并读取内容:
ShareDirectoryClient dirClient = shareClient.GetDirectoryClient("文件所在的子目录(可选)"); ShareFileClient fileClient = dirClient.GetFileClient("目标文件.csv"); // 读取到内存流,可直接处理或写入临时文件供后续组件使用 using (MemoryStream ms = new MemoryStream()) { fileClient.DownloadTo(ms); ms.Position = 0; // 示例:写入临时文件 using (FileStream fs = new FileStream(@"C:\temp\tmp_file.csv", FileMode.Create)) { ms.CopyTo(fs); } }
- 初始化文件共享客户端:
- 这个方式不需要映射驱动器,适合无本地主机的云环境,灵活性更强。
方法3:借助Azure Data Factory中转文件
- 如果SSIS包部署在ADF的Azure-SSIS IR中,可以通过ADF先把Azure文件存储里的CSV转存到Blob存储:
- 在ADF管道里添加复制活动,源选择Azure文件存储,目标选择Azure Blob存储
- 再添加执行SSIS包活动,让SSIS通过Azure Blob存储连接管理器读取Blob中的CSV文件
- 适合需要批量处理大量文件,且已经在使用ADF的场景。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

