預設情況下,管線流程會將結果寫入由 Unity 目錄管理的 Delta 表格,通常是串流資料表或實體化檢視表。 Sinks 是一種替代性輸出目標,可讓您將轉換後的資料寫入 Databricks 管理的儲存體之外的目的地,例如事件串流服務或自訂資料存放區。
你使用其中一個接收端 API 來定義接收端,然後在你的 update_flow 或 target 定義中將它作為 append_flow 來參照。
什麼時候該使用水槽
Databricks 建議在需要時使用匯流:
- 建立低延遲的營運應用案例,例如詐騙偵測、即時分析或客戶推薦,這些情況下資料必須流向訊息匯流排而非雲端儲存。 對於需要毫秒延遲時間的工作負載,請參閱 在 Lakeflow 管線中使用即時模式。
- 將轉換後的資料寫入由外部 Delta 實例管理的資料表,包括 Unity Catalog 管理的資料表及外部資料表。
- 對外部系統執行反向 ETL,例如將處理過的資料寫回 Apache Kafka 主題,供 Azure Databricks 外部使用。
- 以 Azure Databricks 原生不支援的格式撰寫,使用 Python 自訂資料來源。
水槽類型
管線支援下列接收端類型:
| 水槽類型 | 說明 |
|---|---|
| Delta 資料表接收端 | 寫入受 Unity Catalog 管理的或外部 Delta 資料表。 指定檔案路徑或完全限定的資料表名稱。 |
| Apache Kafka 匯入點 | 利用管線執行時內建的 Kafka 連接器,寫入 Apache Kafka 主題。 |
| Azure 事件中樞接收端 | 使用 Kafka 介面寫入 Azure 事件中樞。 使用與卡夫卡水槽相同的選項。 |
| Python 自訂接收器 | 使用註冊於 spark.dataSource.register. 的 Python 自訂資料來源寫入任何資料庫。 |
ForEachBatch 下沉 |
對每個微批次的串流資料套用自訂的 Python 邏輯。 適用於需要寫入多個目的地、執行 upsert 作業,或使用不原生支援串流寫入的目標時。 |
ForEach 接收端 |
對每一列串流資料套用自訂的 Python 邏輯。 當你需要將每筆記錄寫入沒有內建接收端的目的地時,例如外部 API 或金鑰值儲存庫,請使用。 |
接收端 API
管線有三種 API 用於建立接收端:
-
create_sink():建立支援類型的具名接收端(Delta、Kafka、AEH 或 Python 自訂資料來源)。 僅有 Python 版本。 請參見 :在管線中使用水槽。 -
foreach_batch_sink():用來修飾會針對串流資料的每個微批次執行的 Python 函式。 為自訂寫入邏輯提供最大彈性。 請參見 使用 ForEachBatch 向管線中的任意資料接收端寫入資料。 -
foreach_sink()裝飾一個 Python 函式,或接受一個 writer 物件,該函式會對每一列串流資料執行。 請參見「使用ForEach接收端來寫入管線中的每一列」。
你將三種水槽類型都稱為 target、append_flow 或 update_flow。
Limitations
- Sinks 只在 Python 中提供。 不支援 SQL。
- 僅支援串流查詢。 不支援批次查詢。
- 只有
append_flow和update_flow可以寫入接收端。create_auto_cdc_flow和其他流型則不支援。- 更新流程不支援 Delta Lake 資料表接收端。
- 接收器不支援管線預期。
- 執行完整重新整理不會清除先前寫入接收端的資料。