串流分析的 Azure Blob 儲存體 和 Data Lake Storage Gen2 輸出
Azure Data Lake Storage Gen2 Azure 儲存體 在 Azure 上建置企業數據湖的基礎。 Data Lake Storage Gen2 的設計目的是為了服務數 PB 的資訊,同時維持數百 GB 的輸送量。 您可以使用它輕鬆地管理大量數據。 Data Lake Storage Gen2 的基本部分是將階層命名空間新增至 Azure Blob 儲存體。
Blob 記憶體提供符合成本效益且可調整的解決方案,可將大量的非結構化數據儲存在雲端中。 如需 Blob 記憶體及其用法的簡介,請參閱上傳、下載及列出具有 Azure 入口網站 的 Blob。
注意
如需 Avro 和 Parquet 格式特定行為的相關信息,請參閱概觀中的相關章節。
輸出設定
下表列出建立 Blob 或 Data Lake Storage Gen2 輸出的屬性名稱及其描述。
屬性名稱 | 描述 |
---|---|
輸出別名 | 查詢中用來將查詢輸出導向至此 Blob 的易記名稱。 |
儲存體帳戶 | 您傳送輸出的儲存體帳戶名稱。 |
儲存體帳戶金鑰 | 與儲存體帳戶相關聯的密碼金鑰。 |
容器 | 儲存在 Blob 記憶體中的 Blob 邏輯群組。 當您將 blob 上傳至 Blob 儲存體時,必須指定該 blob 的容器。 動態容器名稱是選擇性的。 它只支援容器名稱中的一個和一個動態 {field} 。 欄位必須存在於輸出數據中,並遵循 容器名稱原則。欄位資料類型必須是 string 。 若要使用多個動態欄位或結合靜態文字與動態欄位,您可以在查詢中使用內建字串函式來定義它,例如 CONCAT 和 LTRIM 。 |
事件序列化格式 | 輸出資料的序列化格式。 支援 JSON、CSV、Avro 和 Parquet。 Delta Lake 會列為這裡的選項。 如果已選取 Delta Lake,則資料會處於 Parquet 格式。 深入瞭解 Delta Lake。 |
Delta 路徑名稱 | 當事件串行化格式為 Delta Lake 時需要。 用來在指定容器內寫入 Delta Lake 數據表的路徑。 其包含資料表名稱。 如需詳細資訊和範例,請參閱 寫入 Delta Lake 數據表。 |
寫入模式 | 寫入模式會控制 Azure 串流分析寫入輸出檔案的方式。 只有在寫入模式為 [一次] 時,才會進行一次傳遞。 如需詳細資訊,請參閱一節。 |
資料分割資料行 | 選擇性。 要 {field} 分割之輸出數據的名稱。 僅支援一個分割區資料行。 |
路徑模式 | 當事件串行化格式為 Delta Lake 時需要。 用來在指定容器中寫入 Blob 的檔案路徑模式。 在路徑模式中,您可以選擇使用日期和時間變數的一或多個實例來指定寫入 Blob 的頻率: {date} 、 {time} 。 如果您的寫入模式為 [一次],您必須同時使用 {date} 和 {time} 。 您可以使用自定義 Blob 分割,從事件資料指定一個自定義 {field} 名稱來分割 Blob。 欄位名稱是英數字元,可以包含空格、連字號和底線。 自訂欄位的限制包含下列各項:
這項功能允許在路徑中使用自訂日期/時間格式的指定名稱設定。 自訂日期/時間格式必須一次指定一個,並以 關鍵詞括 {datetime:\<specifier>} 住。 允許輸入為、、、、dd M 、d 、HH 、H 、、mm 、、m 、 ss 或 s 。MM yyyy \<specifier> {datetime:\<specifier>} 關鍵詞可以在路徑中多次使用,以形成自定義日期/時間組態。 例如:
所建立資料夾結構的時間戳記遵循 UTC 而非當地時間。 System.Timestamp 是用於所有以時間為基礎的數據分割的時間。 檔案命名會使用下列慣例: {Path Prefix Pattern}/schemaHashcode_Guid_Number.extension 在這裡, Guid 代表指派給內部寫入器的唯一標識符,該寫入器會寫入 Blob 檔案。 數位代表 Blob 區塊的索引。 範例輸出檔案︰
如需有關這項功能的詳細資訊,請參閱 Azure 串流分析自訂 Blob 輸出資料分割。 |
日期格式 | 當事件串行化格式為 Delta Lake 時需要。 如果前置詞路徑中使用日期權杖,您可以選取組織檔案要用的日期格式。 例如 YYYY/MM/DD 。 |
時間格式 | 當事件串行化格式為 Delta Lake 時需要。 如果前置詞路徑中使用時間權杖,請指定組織檔案要用的時間格式。 |
資料列下限 | 這是每一批次中的資料列數目下限。 針對 Parquet,每個批次都會建立新的檔案。 目前的預設值為 2,000 個資料列,允許的上限為 10,000 個資料列。 |
時間上限 | 每個批次的等候時間上限。 在此時間後,即使未符合資料列下限需求,也會將批次寫入輸出。 目前的預設值為 1 分鐘,允許的上限為 2 小時。 如果您的 Blob 輸出具有路徑模式頻率,則等候時間不得高於分割區時間範圍。 |
編碼方式 | 如果您使用 CSV 或 JSON 格式,則必須指定編碼。 UTF-8 是目前唯一支援的編碼格式。 |
分隔符號 | 僅適用於 CSV 序列化。 串流分析可支援許多序列化 CSV 資料常用的分隔符號。 支援的值是逗號、分號、空格、索引標籤和分隔號。 |
格式 | 僅適用於 JSON 序列化。 分隔的行會指定輸出的格式化方式為利用新行分隔每個 JSON 物件。 如果您選取分隔的行,JSON 會一次讀取一個物件。 整個內容本身不是有效的 JSON。 陣列會指定輸出將會格式化為 JSON 物件的陣列。 只有在作業停止或串流分析已移動到下一個時間範圍時,才會關閉這個陣列。 一般而言,最好使用以行分隔的 JSON,因為輸出檔仍在寫入時不需要任何特殊處理。 |
完全一次傳遞 (公開預覽)
讀取任何串流輸入時,端對端完全一次傳遞表示處理過的數據會寫入 Data Lake Storage Gen2 輸出一次,而不會重複。 啟用此功能時,串流分析作業保證不會遺失任何數據,也不會在使用者起始的上次輸出時間重新啟動時產生任何重複專案。 它不需要實作和疑難解答重複數據刪除邏輯,即可簡化串流管線。
寫入模式
串流分析有兩種方式會寫入您的 Blob 記憶體或 Data Lake Storage Gen2 帳戶。 其中一種方式是將結果附加至相同的檔案,或附加至結果傳入的檔案序列。 另一種方式是在時間分割的所有結果之後寫入,當時間數據分割的所有數據都可供使用時。 當寫入模式為 [一次] 時,就會啟用正好一次傳遞。
Delta Lake 沒有寫入模式選項。 不過,Delta Lake 輸出也會使用 Delta 記錄提供完全相同的一次保證。 它不需要時間分割,而且會根據使用者定義的批處理參數持續寫入結果。
注意
如果您不想對一次傳遞使用預覽功能,請選取 [ 附加為結果送達]。
組態
若要接收 Blob 記憶體或 Data Lake Storage Gen2 帳戶的完全一次傳遞,您需要設定下列設定:
- 針對您的 [寫入模式] 選取 [時間分割區的所有結果可供使用之後一次]。
- 提供和
{date}
{time}
指定的路徑模式。 - 指定 [日期格式] 和 [時間格式]。
限制
- 不支援子串流。
- 路徑模式會變成必要的屬性,而且必須同時包含
{date}
和{time}
。 不允許動態自定義{field}
名稱。 深入了解自訂路徑模式。 - 如果在上次輸出時間之前或之後的自定義時間啟動作業,則檔案可能會遭到覆寫。 例如,當時間格式設定為 HH 時,會每小時產生檔案。 如果您在上午 8:15 停止作業,並在上午 8:30 重新啟動作業,則從上午 8 點到上午 9 點之間產生的檔案只會涵蓋上午 8:30 到上午 9 點的數據。 從上午 8 點到上午 8:15 的數據會在覆寫時遺失。
Blob 輸出檔案
當您使用 Blob 記憶體做為輸出時,會在下列情況下在 Blob 中建立新的檔案:
- 檔案超過允許的區塊數目上限 (目前為 50,000 個)。 您可以達到允許的最大區塊數目,而未達到允許的 Blob 大小上限。 比方說,如果輸出速率很高,您可看到每個區塊有更多位元組,且檔案大小更大。 如果輸出速率很低,每個區塊都會具有較少的資料,且檔案大小會較小。
- 輸出中有架構變更,而輸出格式需要固定架構 (CSV、Avro 或 Parquet)。
- 作業會在外部重新啟動,使用者將其停止並啟動,或是在內部進行系統維護或錯誤復原。
- 完全分割查詢,而系統會為每個輸出分割區建立新檔案。 它來自相容性層級 1.2 中導入的 using
PARTITION BY
或 native parallelization。 - 使用者刪除儲存體帳戶的檔案或容器。
- 使用路徑前置詞模式將輸出進行時間分割,則會在查詢移至下一個小時的時候使用新的 Blob。
- 輸出是由自訂欄位進行分割,系統會針對每個分割區索引鍵建立新的 blob (若不存在的話)。
- 輸出是由自訂欄位進行分割,其中分割區索引鍵基數超過 8000,則系統可能會針對每個分割區索引鍵建立新的 Blob。
資料分割
針對分割區索引鍵,請在 {date}
路徑模式中使用 和 {time}
來自事件欄位的令牌。 選擇日期格式, 例如 YYYY/MM/DD
、 DD/MM/YYYY
或 MM-DD-YYYY
。 HH
用於時間格式。 Blob 輸出可以透過單一自定義事件屬性 {fieldname}
或 {datetime:\<specifier>}
來分割。 輸出寫入器的數目會遵循可完全平行化查詢的輸入資料分割。
輸出批次大小
如需訊息大小上限,請參閱 Azure Storage 限制。 Blob 區塊大小上限為 4 MB,Blob 區塊計數上限為 50,000。
限制
- 如果在路徑模式中使用正斜線符號 (
/
例如/folder2/folder3
,),則會建立空白資料夾,而且它們不會顯示在 儲存體總管 中。 - 串流分析會在不需要新的 Blob 檔案的情況下,附加至相同的檔案。 如果設定 Azure 事件方格 等 Azure 服務在 Blob 檔案更新上觸發,可能會產生更多觸發程式。
- 串流分析預設會附加至 Blob。 當輸出格式是 JSON 陣列時,它會在關機時完成檔案,或當輸出移至下一次分割區以進行時間分割輸出時。 在某些情況下,例如不完全重新啟動,JSON 陣列的右方括弧 (
]
) 可能會遺失。