SQL Server Azure数据工厂:使用自托管集成运行时将文件系统二进制文件(jpg或png)上传到内部部署SQL数据库中的varbinary列

gab6jxml  于 2022-11-28  发布在  其他
关注(0)|答案(1)|浏览(129)

我正在尝试将图片文件(jpg或png)的文件夹(大约7300项)从文件系统上传到名为DocumentBinary的内部部署SQL数据库表:
DocumentBinary table
我希望为此使用数据工厂管道。我正在使用自承载的集成运行时连接到SQL Server数据库。
我找遍了所有地方,但找不到一个如何做到这一点的例子。
我曾尝试使用“复制数据”活动,其中文件系统中的文件使用二进制源数据集(指向文件夹),数据库表使用SQL Server接收数据集,但数据工厂显示以下错误消息:
当源是二进制数据集时,接收器必须是二进制
(both源和宿需要是二进制的)。
我曾尝试使用不带分隔符的DelimitedText数据集作为源,但收到以下错误:
复制数据活动名称中引用数据集时,行/列分隔符不能为空字符串...

eblbsuwk

eblbsuwk1#

当源是二进制数据集时,接收器必须是二进制
错误原因是在Azure数据工厂中如果您尝试复制二进制文件,则源和接收器都应为二进制数据集
根据您的要求,我想向您建议一个解决此问题的变通方法或替代方案。

  • 首先,我使用Get Metadata activity并将Field list设置为Childitems,以从文件系统中获取所有图片文件(jpg或PNG)。

用于获取元数据的数据集:

获取元数据设置:

  • 然后,我使用@activity('Get Metadata1').output.childItems将GetMetadata的输出传递给ForEach

  • 之后,在复制活动中,我使用了一个Set Variable activity,其中我创建了一个具有字符串数据类型的Demo变量,在值中,我将路径与文件名(如@concat('E:\images\',item().name))连接起来。

  • 现在,我将上述变量传递给脚本活动,以便使用插入查询将该文件插入到表中,如下所示
INSERT INTO ImageTable (Name, Photo)
SELECT '@{item().name}', BulkColumn
FROM Openrowset( Bulk '@{variables('demo')}', Single_Blob) as image


指令集

输出

相关问题