【问题标题】:Copy images from SQL image field to Azure Blob Storage as blob blocks将图像从 SQL 图像字段复制到 Azure Blob 存储作为 blob 块
【发布时间】:2021-04-24 21:11:53
【问题描述】:

我有一个 SQL 表,其中存储了很多图像,结构如下:

CREATE TABLE [dbo].[DocumentsContent](
    [BlobName] [varchar](33) NULL,
    [Content] [varbinary](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

我需要将所有图像从数据库复制到 Azure Blob。问题是有 3TB 的图像,因此一个脚本会逐个读取它们(从 SQL)并复制到 Azure,这不是理想的解决方案。

我已尝试使用 SSISData Factory,但两者都只创建一个包含所有信息的文件,而不是我需要的每一行的一个文件(或在以免像我做的那样)。

有什么工具可以在适当的时候做吗?或者有什么方法可以为此使用 SSIS 或数据工厂?

谢谢!

【问题讨论】:

    标签: ssis database-migration azure-data-factory azure-blob-storage


    【解决方案1】:

    您可以使用 Azure 数据工厂中的 2 个活动来实现它:

    1. 使用查找活动获取行数
    2. 使用以行数作为输入的 foreach 活动,由于每一行都是独立的,因此您可以保持并行执行。

    在 foreach 中,使用复制活动,源为 SQL,过滤条件为行号,目标为 blob。

    这将为每一行生成单独的文件并并行发生

    【讨论】:

    • 感谢您的解决方案。对于 go throw 每一行并获取信息,它正在工作。
    • @Irina 很高兴知道它很有帮助。您能否将其标记为答案,以便对社区也有益
    • @Nadan,还没有完成 10%;我需要弄清楚如何复制文件;现在只需解析记录。将 Azure Blob 作为目标时,SQL 作为源不起作用;应该添加我认为的其他内容
    • @Irina:您可以将 SQL 作为 ADF 中的源,将存储作为 Sink 来复制文件
    • @Nadan,是的,作为源我有一个 SQL 数据集,其中包含以下查询作为示例:SELECT TOP 1 Content FROM DocumentsContent 并作为 Sink the Azure Blob;如果我使用 Azure Blob 数据集作为源,它可以工作(因为源和目标都是二进制数据类型);所以我想 SQL 需要一个格式或其他组件来链接
    【解决方案2】:

    其他想法:

    选项 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
    

    【讨论】:

    • 感谢您的解决方案,但我想避免将文件复制到本地磁盘
    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2021-01-16
    • 2017-07-11
    • 2018-11-21
    • 2015-03-26
    • 2016-08-23
    • 1970-01-01
    相关资源
    最近更新 更多