Azure 串流分析 - 寫入 Delta Lake 數據表

Delta Lake 是一種開放格式,可將可靠性、品質和效能帶入 Data Lake。 Azure 串流分析可讓您直接將串流數據寫入您的 Delta Lake 數據表,而不需要撰寫單行程式代碼。

串流分析作業可以設定為透過原生差異湖輸出連接器寫入 Azure Data Lake 儲存體 Gen2 帳戶中新的或預先建立的 Delta 數據表。 此連接器已針對附加模式中差異數據表的高速擷取優化,也提供一次語意,保證不會遺失或複製任何數據。 從 Azure 事件中樞 擷取實時數據流到 Delta 數據表可讓您執行臨機操作互動式或批次分析。

Delta Lake 組態

若要在 Delta Lake 中寫入數據,您必須連線到 Azure Data Lake 儲存體 Gen2 帳戶。 下表列出與 Delta Lake 組態相關的屬性。

屬性名稱 描述
事件序列化格式 輸出資料的串行化格式。 支援 JSON、CSV、AVRO、Parquet。 Delta Lake 在這裡列為選項。 如果已選取 Delta Lake,則數據會以 Parquet 格式顯示。
差異路徑名稱 用來在指定容器內寫入 Delta Lake 數據表的路徑。 其中包含數據表名稱。 下一節中的詳細數據。
數據分割數據行 選擇性。 輸出數據到分割區的 {field} 名稱。 僅支援一個數據分割數據行。 數據行的值必須是字串類型

若要查看 ADLS Gen2 組態的完整清單,請參閱 ALDS Gen2 概觀

差異路徑名稱

差異路徑名稱可用來指定儲存在 Azure Data Lake 儲存體 Gen2 中的 Delta Lake 資料表位置和名稱。

您可以選擇使用一或多個路徑區段來定義差異資料表的路徑和差異資料表名稱。 路徑區段是連續分隔符之間的字串,例如,對應至虛擬目錄名稱的正斜線 /

區段名稱是英數位元,可以包含空格、連字元和底線。 最後一個路徑區段會當做數據表名稱使用。

差異路徑名稱的限制包括下列限制:

  • 功能變數名稱不區分大小寫。 例如,服務無法區分資料列 IDid
  • 不允許動態 {field} 名稱。 例如,{ID} 會被視為文字 {ID}。
  • 組成名稱的路徑區段數目不能超過254。

範例

差異路徑名稱的範例:

  • 範例 1:WestUS/CA/factory1/device-table
  • 範例 2:測試/示範
  • 範例 3:mytable

範例輸出檔案:

  1. 在選擇的容器下,目錄路徑會是 WestEurope/CA/factory1 ,而差異數據表資料夾名稱會是 device-table
  2. 在選擇的容器下,目錄路徑會是 Test ,而差異數據表資料夾名稱將會示範
  3. 在所選的容器下,差異數據表資料夾名稱會是 mytable

建立新的數據表

如果 Delta Lake 數據表的名稱尚未相同,且在 Delta Path 名稱所指定的位置中,根據預設,Azure 串流分析會建立新的 Delta 數據表。 這個新資料表是使用下列組態建立的:

寫入數據表

如果 Delta Lake 數據表已存在具有相同名稱,且在 Delta Path 名稱所指定的位置中,根據預設,Azure 串流分析會將新記錄寫入現有的數據表。

正好傳遞一次

事務歷史記錄可讓 Delta Lake 完全保證處理一次。 在單一作業執行期間,Azure 串流分析也會在將數據輸出至 Azure Data Lake 儲存體 Gen2 時提供完全相同的傳遞。

強制執行結構描述

架構強制執行表示所有對數據表的新寫入都會強制在寫入時與目標數據表的架構相容,以確保數據品質。

輸出數據的所有記錄都會投影到現有數據表的架構。 如果將輸出寫入新的差異數據表,則會使用第一筆記錄來建立數據表架構。 如果連入數據與現有的數據表架構相比有一個額外的數據行,則會在數據表中寫入,而不需要額外的數據行。 如果連入數據與現有的數據表架構相比遺漏了一個數據行,則會在數據表中寫入數據行,且數據行為 Null。

如果差異數據表的架構與串流作業記錄的架構之間沒有交集,它就會被視為架構轉換失敗的實例。 這不是唯一會被視為架構轉換失敗的情況。

在架構轉換失敗時,作業行為會遵循在作業層級設定的輸出數據錯誤。

差異記錄檢查點

串流分析作業會定期以 V1 格式建立 差異記錄檢查點 。 差異記錄檢查點是 Delta 數據表的快照集,通常包含串流分析作業所產生的數據檔名稱。 如果數據檔數目很大,則會導致大型檢查點,這可能會導致串流分析作業中的記憶體問題。

限制

  • 不支援動態數據分割索引鍵(在差異路徑中指定記錄架構的數據行名稱)。
  • 不支援多個數據分割數據行。 如果需要多個數據分割數據行,建議在查詢中使用複合索引鍵,然後將它指定為數據分割數據行。
    • 您可以在查詢中建立複合索引鍵,例如:「SELECT concat (col1, col2) AS compositeColumn INTO [blobOutput] FROM [input]“。
  • 寫入 Delta Lake 只會附加。
  • 查詢測試中的架構檢查無法使用。
  • 串流分析不會執行小型檔案壓縮。
  • 系統會建立所有數據檔,而不需要壓縮。
  • 不支援 Date 和 Decimal 類型
  • 寫入寫入器版本 7 或更新版本的現有數據表寫入寫入器功能失敗。
  • 當串流分析作業將數據批次寫入 Delta Lake 時,它會產生多個 「新增檔案動作」。 當針對單一批次產生太多 「新增檔案動作」時,串流分析作業可能會停滯。
  • 串流分析作業只能讀取和寫入單一部分 V1 檢查點。 不支援多部分檢查點和檢查點 V2 格式。

下一步