即時處理

已完成

串流資料表是差異資料表,其中包含對串流和累加資料處理的支援。 與傳統資料表不同,串流資料表的設計目的是在資料到達時持續接受資料。 它會由管線內的流程更新,對於必須持續擷取或轉換新資料的案例非常有用。

串流資料表對於資料擷取特別有用,因為它們只會處理每個輸入資料列一次,這符合大多數擷取工作負載。 它們能夠有效率地處理大量僅附加資料。 它們在低延遲轉換中也很有價值,因為它們可以在行和時間範圍內處理資料、管理大量輸入,並以最小的延遲提供結果。

串流資料表的運作方式

更新串流資料表時,與其相關聯的流程會從串流來源讀取新資訊,並將其附加至資料表。 該表定義在管線的原始程式碼中,並且只有該管線有權更新它。 如果在 Databricks SQL 的管線外部建立串流資料表,系統會自動產生隱藏管線來管理其更新。

實際上,多個流程可以將資料附加至相同的串流資料表。 從概念上講,您可以將串流資料表想像為 ETL 程序中的中心目的地,其中流程會持續提供新資料。

建立串流資料表

在 SQL 中,您可以使用 Lakeflow 宣告式管線定義串流資料表,如下所示:

CREATE OR REFRESH STREAMING TABLE customers_bronze
AS SELECT * FROM STREAM read_files(
  "/volumes/path/to/files",
  format => "json"
);

僅附加行為

串流資料表的設計目的是要與僅附加資料來源搭配使用。 將資料列附加至資料表之後,即使定義資料表的查詢變更,也不會重新處理資料列。 例如,如果原始查詢將名稱轉換為小寫,然後修改以將其轉換為大寫,則已附加的列會保持小寫。 只有變更後到達的新列才會使用更新的邏輯進行處理。 如果您需要使用新的轉換來更新所有資料列,則必須觸發管線的完整重新整理。

低延遲串流

串流資料表會透過檢查點管理針對低延遲工作負載進行最佳化。 它們在處理有界流時運作最佳。 當資料來源有明確的開始和結束時,就會發生自然系定資料流程,例如在初始批次之後未更新的檔案目錄。 綁定流的另一種方法是應用水印。 Spark 結構化串流中的浮水印會指定系統在關閉時間範圍之前,應該等候延遲抵達的資料時間長度。 如果沒有浮水印,無限串流可能會無限累積狀態,導致記憶體壓力導致管道失敗。

串流快照集聯結

串流資料表也支援即時資料流程與維度資料表的靜態快照之間的聯結。 在此案例中,維度表格會在串流啟動時被視為快照集。 除非明確重新整理維度資料表,否則資料流程開始之後維度的任何變更都不會反映在聯結中。 在事實資料表相較於維度資料表非常大的使用案例中,這種方法通常是可以接受的,而且可以容忍很小的差異。

串流表格的限制

串流資料表有下列限制:

  • 有限的演進:變更查詢只會影響新資料列;除非觸發完整重新整理,否則舊資料列會保持不變。

  • 狀態管理:需要有界或浮水印的串流以避免失敗。

  • 聯結不會重新計算:當維度資料表變更時,聯結不會更新。 對於一律正確的聯結,請使用具體化檢視。