【问题标题】:Using mapping data flows within for-each activity of azure data-factory pipeline在 azure data-factory 管道的 for-each 活动中使用映射数据流
【发布时间】:2020-05-06 09:48:30
【问题描述】:

场景:我有 SQL DB CDC 网络更改进入 csv 文件。在 csv 文件中的每一行的管道中,需要检查更新、插入和删除,并在我的仓库数据库中进行一些更改。

管道:

映射数据流:

问题:

如何在数据流中使用 foreach 中的 item() 并从 csv 文件和进程中获取该记录。我在数据流的源步骤中没有看到任何字段/选项。

【问题讨论】:

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


    【解决方案1】:

    这里不需要使用 ForEach。数据流可以从您的 CDC 源文件中读取每一行,并且您可以应用适当的插入、更新、合并、删除操作作为 Alter Row 转换中的策略。

    【讨论】:

    • 谢谢马克。我想建议是使用有条件的行拆分并执行此过程。你能提供更多关于这方面的信息吗?
    • 只需使用 Alter Row 转换。将您的源设置为 CSV 文件。为每个 Update、Insert、Upsert 和 Delete 条件设置一个表达式。
    【解决方案2】:

    首先,您可以在数据流中添加一个参数:

    然后退出数据流,点击数据流,用管道表达式设置数据流参数:

    然后您可以将 Foreach item() 设置为数据流参数:

    现在,您可以在数据流中使用 foreach 中的 item() 并从 csv 文件和进程中获取该记录。

    希望这会有所帮助。

    【讨论】:

    • 从“仅仅因为你可以并不意味着你应该”的编年史中:) 您实际上是在使用查找活动从 CSV 文件中读取每一行并将其发送到数据流的一行一次。请不要这样做!只需在数据流源转换中使用该 CSV 文件。让数据流读取每一行并加载到 Spark 中的数据帧中。以后你会感谢我的!
    • 谢谢莱昂。正如你提到的,我已经在这样做了。我是否需要数据流源步骤中的任何特殊内容来通知从该参数而不是为源配置的数据集读取?数据流的第一个源步骤仍然指向具有完整 csv 访问权限的同一数据集
    • @VT0906 不,我们不能使用 Forach item() 作为数据流中的源数据集。我们唯一能做的就是使用 item() 构建一个表达式来过滤完整 csv 中的数据,添加活动,例如更改行或 DerivedColumn。
    • 是的,您可以在数据流活动中使用@item() 作为数据集参数。建议在数据流中使用源转换来过滤源的 CSV 文件。在 Source 选项中使用通配符路径而不是 ForEach。不推荐使用带有数据流的 ForEach 模式。我在我们的性能文档中谈到了这一点:docs.microsoft.com/en-us/azure/data-factory/…
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2021-07-07
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多