问题描述
CREATE TABLE [dbo].[DocumentsContent](
[BlobName] [varchar](33) NULL,[Content] [varbinary](max) NULL
) ON [PRIMARY] TEXtimage_ON [PRIMARY]
GO
我需要将所有图像从数据库复制到 Azure Blob。问题是有 3TB 的图像,因此一个脚本(从 sql 中)读取它们并复制到 Azure 并不是理想的解决方案。
我已经尝试使用 SSIS 和 数据工厂,但两者都只创建一个包含所有信息的文件,而不是我需要的每一行创建一个文件(或在以免像我那样)。
有什么工具可以在合适的时间内完成?或者有什么方法可以为此使用 SSIS 或数据工厂?
谢谢!
解决方法
您可以使用 Azure 数据工厂中的 2 个活动来实现:
- 使用查找活动获取行数
- 使用以行计数作为输入的 foreach 活动,由于每一行都是独立的,因此您可以保持并行执行。
在 foreach 中,使用复制活动,源为 SQL,过滤条件为行号,目标为 blob。
这将为每一行生成单独的文件,并且会并行发生
,其他想法:
选项 1)
- SSIS 数据流任务 - “Export Column”到本地磁盘
- 使用 Filezilla Pro(或同等产品)将多线程传输到 Azure
选项 2)
- 通过 NFS3.0 挂载 Azure Blob
- SSIS 数据流任务 - “导出列”到挂载磁盘
拆分工作负载以并行执行
WHERE CHECKSUM([BlobName]) % 5 = 0
WHERE CHECKSUM([BlobName]) % 5 = 1
WHERE CHECKSUM([BlobName]) % 5 = 2
WHERE CHECKSUM([BlobName]) % 5 = 3
WHERE CHECKSUM([BlobName]) % 5 = 4