当多个文件加载到 ADLS 时如何执行数据块笔记本

How to execute a databricks notebook when multiple files loaded to ADLS

我正在寻找一种执行依赖于已加载到 Azure Data Lake Storage 的多个文件的数据块笔记本的简便方法。

多个不同的 ADF 包正在将不同的文件加载到 ADLS 中,然后由 databricks notebooks 处理。一些笔记本依赖于来自不同包的多个文件。

单个文件使用事件触发器就足够简单了。如果没有像 Airflow 处理依赖项这样的东西,这可以推广到多个文件吗?

这并不轻松,因为您必须配置 Azure SQL table,但这就是我要做的:

  1. 我会在 ADLS 中创建并存储一个 JSON 文件,其中详细说明了每个 notebook/pipeline 和文件名依赖关系。
  2. 然后我将提供一个 Azure SQL Table 来存储每个文件的元数据。本质上,这个 table 将有 3 列:
  • 一般文件名(与步骤 #1 中的文件名相关性匹配(例如:FileName)
  • 真实文件名(例如:FileName_20201007.csv)
  • 时间戳
  • 如果文件存在则标记(布尔值)
  • 标记(布尔值)是否处理​​了文件(即:它依赖于 Databricks 笔记本有 运行)
  1. 为了在第 2 步中填充 table,我将使用 Azure 逻辑应用程序,它将查找何时创建满足您的条件的 blob,然后随后 update/create Azure SQL Table 上的新条目。 看: https://docs.microsoft.com/en-us/azure/connectors/connectors-create-api-azureblobstorage & https://docs.microsoft.com/en-us/azure/connectors/connectors-create-api-sqlazure

  2. 您需要确保在 运行 的 Azure pipeline/Databricks Notebook 末尾更新相应的 Azure SQL 标志dependencies 以指示这些版本的文件已处理。您的 Azure SQL Table 将作为 'watermark' table.

在您的管道触发 Azure databricks notebook 之前,您的管道将在 ADLS 中查找 JSON 文件,识别每个 Notebook 的依赖项,检查是否所有依赖项都可用并且未被 Databricks notebook 处理,然后在满足所有这些条件后继续 运行 Databricks notebook。

就触发管道而言,您可以使用 Azure LogicApp 来执行此操作,也可以在 ADF 上利用翻滚 window。