【问题标题】:Processing tables in parallel using Azure Data Factory, single pipeline, single Databricks Notebook?使用 Azure 数据工厂、单个管道、单个 Databricks Notebook 并行处理表?
【发布时间】:2020-01-13 20:55:19
【问题描述】:

我想使用 Azure 数据工厂和一个 Databricks Notebook 并行转换表列表。

我已经有一个 Azure 数据工厂 (ADF) 管道,它接收表列表作为参数,将表列表中的每个表设置为变量,然后调用一个笔记本(执行简单转换)并传递每个表与本笔记本串联。问题是它以串行方式(一个接一个)而不是并行方式(所有表同时)转换表。我需要并行处理这些表。

所以,我的问题是: 1) 是否可以从 Azure 数据工厂在完全相同的时间点(每次使用不同的表作为参数)多次触发同一个 Databricks 笔记本? 2) 如果是,那么我需要在管道或笔记本中进行哪些更改才能使其正常工作?

提前致谢:)

参数

变量

设置表变量和笔记本

配置顺序

未检查顺序且批次计数 = 空白

当配置为“sequential”且 Batch Count = 空白并传递两个表时,管道“成功”运行但只有一个表被转换(即使我在表列表中添加多个表)。 “设置变量”正确显示两次,每个表一次。但 Orchestrate 为同一张表显示了两次。

顺序未检查,批数 = 2

当配置为“顺序”且批处理计数 = 2 并传递两个表时,管道在第二次迭代时失败,但它也会尝试转换同一个表两次。 “设置变量”正确显示两次,每个表一次。但 Orchestrate 为同一张表显示了两次。

顺序检查或批次计数 =1

如果我保留 Sequential Checked 或 Batch Count =1,则管道将正确运行并对所有表执行转换,但处理是按顺序进行的(如预期的那样)。下面是 5 个表的示例。

设置可变任务

通过值@item() 传递的变量表

定义为字符串的变量“表”

参数“table_list”

管道运行参数

【问题讨论】:

  • 单个笔记本执行多次是绝对可能的。我们一直在使用它。您能否展示一下您在设置变量任务中所做的事情以及如何将变量传递给笔记本?
  • @SimonZeinstra 感谢您的回复!我在问题描述(上图)中添加了设置变量的详细信息以及如何将其传递给笔记本。我期待您的反馈。谢谢! :)

标签: azure azure-data-factory azure-databricks spark-notebook


【解决方案1】:

我使用“查找”到 SQL 表而不是“设置变量”来解决它。下图显示了使用一个笔记本并行运行 5 个表。

【讨论】:

  • 是的,抱歉我之前没有回复。您之前的解决方案的问题是您使用的变量。该变量存在于管道级别,而不是在 foreach 范围内。因此,当您运行并行 foreach 时,变量的值将是最后一次执行 set-variable 活动设置的值。您不需要该解决方案中的变量,您可以直接在 Databricks 活动中使用 @item()。与您在 sql 解决方案中所做的相同。
猜你喜欢
  • 2020-09-06
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多