Azure 串流分析:寫入 Delta Lake 數據表
Delta Lake 是一種開放格式,可將可靠性、品質和效能帶入 Data Lake。 您可以使用 Azure 串流分析,直接將串流數據寫入您的 Delta Lake 數據表,而不需要撰寫單行程式代碼。
串流分析作業可以設定為透過原生 Delta Lake 輸出連接器寫入 Azure Data Lake Storage Gen2 帳戶中新的或預先建立的 Delta 數據表。 此連接器已針對附加模式中的 Delta 數據表進行高速擷取優化。 它也提供完全一次的語意,保證不會遺失或複製任何數據。 將實時數據流從 Azure 事件中樞 擷取到 Delta 數據表,可讓您執行臨機操作的互動式或批次分析。
Delta Lake 設定
若要在 Delta Lake 中寫入數據,您必須連線到 Data Lake Storage Gen2 帳戶。 下表列出與 Delta Lake 組態相關的屬性。
屬性名稱 | 描述 |
---|---|
事件序列化格式 | 輸出資料的序列化格式。 支援 JSON、CSV、Avro 和 Parquet。 Delta Lake 會列為這裡的選項。 如果已選取 Delta Lake,則資料會處於 Parquet 格式。 |
Delta 路徑名稱 | 用來在指定容器內寫入 Delta Lake 數據表的路徑。 其包含資料表名稱。 如需詳細資訊,請參閱下一節。 |
資料分割資料行 | 選擇性。 要 {field} 分割之輸出數據的名稱。 僅支援一個分割區資料行。 數據行的值必須是 string 類型。 |
若要查看 Data Lake Storage Gen2 組態的完整清單,請參閱 Azure Data Lake Storage Gen2 概觀。
Delta 路徑名稱
Delta 路徑名稱可用來指定儲存在 Data Lake Storage Gen2 中的 Delta Lake 數據表位置和名稱。
您可以使用一或多個路徑區段來定義 Delta 資料表的路徑和 Delta 資料表名稱。 路徑線段是連續分隔符號字元 (例如,正斜線 /
) 之間的字串,會對應到虛擬目錄的名稱。
區段名稱是英數字元,且可以包含空格、連字號和底線。 最後一個路徑區段會當做數據表名稱使用。
差異路徑名稱的限制包括:
- 功能變數名稱不區分大小寫。 例如,服務無法區分資料列
ID
和id
。 - 不允許動態
{field}
名稱。 例如,{ID}
會被視為文字 {ID}。 - 組成名稱的路徑區段數目不能超過254。
範例
差異路徑名稱的範例:
- 範例 1:
WestUS/CA/factory1/device-table
- 範例 2:
Test/demo
- 範例 3:
mytable
範例輸出檔案︰
- 在選擇的容器下,目錄路徑為
WestEurope/CA/factory1
,而 Delta 數據表資料夾名稱為 device-table。 - 在所選的容器下,目錄路徑為
Test
,而 Delta 資料表資料夾名稱為 示範。 - 在所選的容器下,Delta 資料表資料夾名稱為 mytable。
建立新表格
如果 Delta Lake 資料表的名稱與差異路徑名稱指定的位置中還沒有相同名稱,則串流分析預設會建立新的 Delta 資料表。 這個新資料表是使用下列組態建立的:
寫入數據表
如果 Delta Lake 數據表已經存在具有相同名稱,且位於 Delta 路徑名稱所指定的位置,則串流分析預設會將新記錄寫入現有的數據表。
完全一次傳遞
事務歷史記錄可讓 Delta Lake 保證完全一次處理。 串流分析也會在單一作業執行期間將數據輸出至 Data Lake Storage Gen2 時,提供一次完全相同的傳遞。
強制執行結構描述
架構強制執行表示所有對數據表的新寫入都會強制在寫入時與目標數據表的架構相容,以確保數據品質。
輸出資料的所有記錄都會投射到現有資料表的結構描述。 如果輸出寫入新的 Delta 數據表,則會使用第一筆記錄來建立資料表架構。 如果連入數據與現有的數據表架構相比有一個額外的數據行,則會在數據表中寫入,而不需要額外的數據行。 如果連入數據與現有的數據表架構相比遺漏了一個數據行,則會在數據表中寫入數據行,且數據行為 Null。
如果 Delta 數據表的架構與串流作業記錄的架構之間沒有交集,它就會被視為架構轉換失敗的實例。 這不是唯一被視為架構轉換失敗的情況。
在架構轉換失敗時,作業行為會 遵循在作業層級設定的輸出數據錯誤處理原則 。
差異記錄檢查點
串流分析作業會定期以 V1 格式建立 差異記錄檢查點 。 差異記錄檢查點是 Delta 數據表的快照集,通常包含串流分析作業所產生的數據檔名稱。 如果數據檔數目很大,會導致大型檢查點,這可能會導致串流分析作業中的記憶體問題。
限制
- 不支援動態數據分割索引鍵(在 Delta 路徑中指定記錄架構的數據行名稱)。
- 不支援多個數據分割數據行。 如果您想要多個數據分割數據行,建議您在查詢中使用複合索引鍵,然後將它指定為數據分割數據行。
- 您可以在查詢中建立複合索引鍵。 例如
"SELECT concat (col1, col2) AS compositeColumn INTO [blobOutput] FROM [input]"
。
- 您可以在查詢中建立複合索引鍵。 例如
- 寫入 Delta Lake 僅會附加。
- 查詢測試中的結構描述檢查無法使用。
- 串流分析不會執行小型檔案壓縮。
- 系統會建立所有數據檔,而不需要壓縮。
- 不支援 Date 和 Decimal 類型。
- 寫入寫入器版本 7 或更新版本的現有數據表寫入寫入器功能失敗。
- 範例:寫入已啟用刪除向量的現有數據表失敗。
- 這裡的例外狀況是 changeDataFeed 和 appendOnly 寫入器功能。
- 當串流分析作業將數據批次寫入 Delta Lake 時,它會產生多個 「新增檔案」動作。 當針對單一批次產生太多 [新增檔案] 動作時,串流分析作業可能會停滯。
- 產生的 [新增檔案] 動作數目取決於許多因素:
- 批次的大小。 它是由數據量和批處理參數 下限數據列和最大時間所決定。
- 批次數據 分割數據行值的 基數。
- 若要減少為批次產生的新增檔案動作數目:
- 減少批處理組態 的最小數據列和最大時間。
- 藉由調整輸入數據或選擇不同的數據分割數據行,減少數據分割數據行值的基數。
- 產生的 [新增檔案] 動作數目取決於許多因素:
- 串流分析作業只能讀取和寫入單一部分 V1 檢查點。 不支援多部分檢查點和檢查點 V2 格式。