用筆記本建立管線

已完成

資料管線通常需要多個筆記本才能以特定順序執行。 當你在 Azure Databricks 用筆記本建立管線時,你會設定控制執行順序的 任務相依 關係。 這些相依關係確保每個步驟在相依步驟開始前就已完成。

在 Lakeflow 工作中新增筆記本任務

筆記本任務會將 Databricks 筆記本作為工作工作流程的一部分執行。 你指定筆記本路徑、配置運算資源,並定義筆記本所需的參數。 多個筆記本任務可以串連起來,形成完整的資料管線。

截圖示範如何將筆記本任務加入 Lakeflow 工作。

當你將筆記本任務加入工作時,每個任務會以 有向無環圖(DAG)中的一個節點出現。 DAG 提供管線執行流程的視覺化呈現,顯示哪些任務優先執行,哪些任務依賴其他任務。

以一個典型的資料處理流程來處理銷售資料。 管線可能包含三個筆記本:一個用於資料擷取,一個用於轉換,一個用於將資料載入最終資料表。 如果沒有設定相依關係,這些筆記本可能會同時執行,當轉換筆記本嘗試讀取尚未被匯入的資料時,可能會失敗。

設定任務相依性

工作相依性控制每個筆記本相對於作業中其他工作的執行時間。 當你設定相依時,你指定一個任務必須等另一個任務完成後才能開始。

要在任務間添加相依關係:

  1. 在工作 DAG 中選擇一個任務。
  2. 在 「Depends on 」欄位,從下拉選單選擇上游任務。
  3. 選擇 儲存任務。

當你在 DAG 中選擇任務再建立新任務時,新任務會自動依賴所選任務。 這種預設行為幫助你快速建立連續的管線。

相依性會在你的管線中建立明確的 執行路徑 。 在一個四任務工作中,任務 2 和任務 3 都依賴任務 1,任務 4 又依賴任務 2 和任務 3,Azure Databricks 會先執行任務 1。 任務 1 成功完成後,任務 2 與任務 3 並行執行。 任務4只有在任務2和任務3都完成後才開始。

Task 1 (ingest_data)
    ├── Task 2 (transform_customers)
    └── Task 3 (transform_orders)
            └── Task 4 (generate_report)

從零開始建立一個筆記本任務

建立基於筆記本的管線,從建立作業並新增您的第一個筆記本工作開始。 以下步驟將逐步介紹完整的設定流程。

  1. 在您的 Azure Databricks 工作區中,選擇側邊欄的 「作業與管道」。
  2. 選擇Create,再選擇Job。
  3. 輸入一個描述筆記本用途的任務名稱,例如 ingest_sales_data。
  4. 在 [ 類型 ] 下拉功能表中,選取 [筆記本]。
  5. 在 「Source 」下拉選單中,選擇「 工作區 」以使用儲存在工作區中的筆記本。
  6. 選擇 路徑 欄位,並瀏覽到你的筆記本位置。
  7. 使用 計算 欄位來配置運算資源。
  8. 選擇 建立任務。

建立第一個任務後,新增筆記本任務並設定它們的相依關係,以完成你的管線結構。 在選取某個工作的情況下,您新增的每個新工作都會自動繼承對該工作的相依性。

筆記本間傳遞參數

筆記本任務可透過參數設定在執行時接收參數。 這些參數可在筆記本中使用 dbutils.widgets。 參數傳遞讓你能在不同工作中重複使用筆記本,並依據不同的輸入進行變化。

要設定筆記本任務的參數:

  1. 在你的工作設定中選擇任務。
  2. 在 參數中選擇 新增。
  3. 在 Key 欄位輸入參數名稱。
  4. 在 Value 欄位輸入參數值。
  5. 選擇 儲存任務。

在你的筆記本中,請用以下方法 dbutils.widgets.get()取得參數:

# Retrieve a parameter named 'process_date' with a default value
dbutils.widgets.text("process_date", "2024-01-01", "Process Date")
process_date = dbutils.widgets.get("process_date")

# Use the parameter in your processing logic
df = spark.read.table("sales_raw").filter(f"date = '{process_date}'")

這種方式讓你的筆記本保持彈性,並允許同一本筆記本根據工作參數處理不同的資料。

筆記本管線的最佳做法

在建立生產筆記本流程時,請遵循以下做法以維持可靠性與清晰度。

  • 使用描述性任務名稱 ,指示筆記本的功能。 像 bronze_ingest_orders 或 silver_transform_customers 這樣的名稱,能立即在 DAG 視圖中明確表達管線的目的。

  • 將筆記本整理成 與管線結構相符的資料夾。 像是資料夾階層/pipelines/sales/bronze//pipelines/sales/silver/,幫助團隊成員快速找到筆記本。

  • 盡可能減少任務依賴。 雖然相依性能確保執行順序正確,但過多的相依性會降低平行性並拖慢你的管線速度。 只有在存在真正資料關聯的地方才加入相依關係。

  • 當你需要追蹤 MLflow 實驗時,應使用工作區筆記本來處理生產工作,而不是放在 Git 資料夾裡的筆記本。 從遠端 Git 存放庫執行的 Notebooks 是短暫的,無法可靠地追蹤 MLfllow 執行或模型。

  • 設計筆記本時要考慮輸出限制。 筆記型電腦的儲存單元輸出總共限制為 20 MB,單一儲存單元則限制為 8 MB。 如果你的筆記本輸出量很大,請把結果寫到表格,而不是用儲存格輸出顯示。