在Azure数据工厂映射数据流中使用参数化的数据集

时间:2019-11-01 18:01:11

标签: azure-data-factory azure-data-factory-2

在通过数据工厂映射数据流进行引用时,我无法使用参数化数据集。

我正在尝试编写一个通用的ELT管道,该管道将从blob存储中的CSV文件读取并将其写入Azure SQL数据库中的表。

使用复制活动时,一切工作正常(请参阅管道“使用复制活动将CSV文件导入通用SQL表”)。

从blob存储中读取CSV文件(文件名作为参数传递到Data Factory Pipeline)。 CSV文件的结构是使用“获取元数据”活动确定的。

CSV文件的结构传递到SQL Server存储过程,该存储过程查找具有与CSV文件相同结构的视图。如果不存在具有相同结构的视图,则会创建一个表和视图。在任何一种情况下,架构名称和视图名称都将传递回管道。然后读取CSV文件的内容并将其写入SQL Server视图。

这很好用,但是我没有机会向每个写入的行添加元数据。因此,我创建了一个映射数据流,该数据流将使用派生的列转换来添加元数据(数据工厂名称,数据工厂管道名称,数据工厂管道运行ID)。

当我尝试调试数据流时,出现错误"An error occurred, please view notification for more details.",我找不到任何有关该错误的信息的通知。

当我使用带有硬编码文件名的数据集时,数据流有效。当我切换到参数化数据流(传递诸如pipeline()。DataFactory等参数)时,这就是我得到的错误。

我已经尝试过对编码数据流参数值进行硬编码,仍然没有乐趣。

模板通过了验证,但是如果我尝试通过触发管道来运行管道“使用数据流将CSV文件导入通用SQL表”,它将很快失败并给我一个神秘的错误消息:

ErrorCode=InvalidTemplate, ErrorMessage=Unable to parse expression 'body('Copy Generic CSV Source to Generic SQL SinkComposeRuntimeVariables')?.Copy Generic CSV Source to Generic SQL Sinkd7ea532482e64afc88501b46924214b3?.ReadFromSourceCSVFileInBlobStorage.FileName'

有没有愿意帮忙的Azure数据工厂专家?

所有源代码都可以在https://github.com/marc-jellinek/AzureDataFactoryDemo_GenericSqlSink

获得

谢谢!

2 个答案:

答案 0 :(得分:2)

哇!我在周五晚上9:30 EST收到了马云的电子邮件,其中包含解决方案。问题在于数据流的名称中有空格。

  

问题是数据流不支持参数表达式   名称中包含空格。您可以尝试重命名数据流吗   “将通用CSV源复制到通用SQL SinkComposeRuntimeVariables”   然后预览?同时,我们将在UX方面添加更多验证   正确处理数据流的命名限制。

我已经从数据流名称中删除了空格并成功进行了测试。

非常感谢您提供的出色支持!让我继续记录,说马克·克罗默(Mark Kromer)和马云(Jack Ma)摇滚!

enter image description here

答案 1 :(得分:0)

您可以使用数据流参数中的表达式将这些值直接从管道传递到数据流活动中,而无需使用数据集参数。

要调试,请打开“调试”开关,然后在“数据流”设计器中,转到转换上的“数据预览”选项卡。您可以使用数据流参数中的默认值进行测试,也可以在调试时使用调试设置进行设置。