來自 Azure 串流分析的輸出
Azure 串流分析「作業」是由輸入、查詢與輸出所組成。 有多種輸出類型可供您傳送轉換的資料。 本文列出支援的串流分析輸出。 在您設計串流分析查詢時,請使用 INTO 子句來參考輸出的名稱。 您可以針對每個作業使用單一輸出,或視需要在查詢中新增多個 INTO 子句,以對每個串流作業使用多個輸出。
若要建立、編輯及測試串流分析作業輸出,您可以使用 Azure portal、Azure PowerShell、.NET API、REST API、Visual Studio 和 Visual Studio Code。
注意
強烈建議您使用適用於 Visual Studio Code 的串流分析工具,以獲得最佳本機開發體驗。 適用於 Visual Studio 2019 的串流分析工具 (2.6.3000.0 版) 有已知的功能差距,且未來將不會改進。
某些輸出類型支援分割,如下表所示。
所有輸出都支援批次處理,但只有部分輸出支援明確設定輸出批次大小。 如需詳細資訊,請參閱輸出批次大小一節。
輸出類型 | 資料分割 | 安全性 |
---|---|---|
Azure 資料總管 | Yes | 受控識別 |
Azure Functions | Yes | 存取金鑰 |
Azure Synapse Analytics | Yes | SQL 使用者驗證、 受控識別 |
Blob 儲存體和 Azure Data Lake Gen 2 | Yes | 存取金鑰、 受控識別 |
Azure Cosmos DB | Yes | 存取金鑰、 受控識別 |
Azure Data Lake Storage Gen 2 | Yes | Microsoft Entra 使用者 受控識別 |
Azure 事件中樞 | 是,需要在輸出設定中設定分割區索引鍵資料行。 | 存取金鑰、 受控識別 |
Kafka (預覽) | 是,需要在輸出設定中設定分割區索引鍵資料行。 | 存取金鑰、 受控識別 |
適用於 PostgreSQL 的 Azure 資料庫 | Yes | 使用者名稱和密碼驗證 |
Power BI | No | Microsoft Entra 使用者, 受控識別 |
Azure 服務匯流排佇列 | Yes | 存取金鑰、 受控識別 |
Azure 服務匯流排主題 | Yes | 存取金鑰、 受控識別 |
Azure SQL Database | 是,選擇性。 | SQL 使用者驗證、 受控識別 |
Azure 資料表儲存體 | Yes | 帳戶金鑰 |
重要
Azure 串流分析會根據設計來使用插入或取代 API。 此作業可取代現有的實體,或插入資料表中不存在的新實體。
資料分割
串流分析支援對 Power BI 以外的所有輸出進行資料分割。 如需分割區索引鍵和輸出寫入器數目的詳細資訊,請參閱您感興趣的特定輸出類型的相關文章。 有關輸出類型的文章已連結在上一節。
此外,若要對分割區進行進階調整,您可以使用您查詢中的 INTO <partition count>
(請參閱 INTO) 子句來控制輸出寫入器的數目,有助於達成所需的作業拓撲。 如果您的輸出配接器尚未分割,一個輸入分割區中缺少資料會導致最多為延遲傳入時間長度的延遲。 在這種情況下,輸出會合併為單一寫入器,這可能會在您的管線中產生瓶頸。 若要深入了解延遲傳入原則,請參閱 Azure 串流分析事件的順序考量。
輸出批次大小
所有輸出都支援批次處理,但只有部分輸出支援明確設定批次大小。 Azure 串流分析使用可變大小批次來處理事件及寫入至輸出。 串流分析引擎通常不會一次撰寫一個訊息,並會使用批次以提升效率。 當傳入和傳出事件的速率很高時,串流分析會使用較大的批次。 當輸出速率較低時,它會使用較小的批次來降低延遲。
Avro 和 Parquet 檔案分割行為
串流分析查詢可以針對指定的輸出產生多個結構描述。 可以逐列變更對應的資料行清單及其類型。 根據設計,Avro 和 Parquet 格式不支援單一檔案中的變數結構描述。
使用這些格式將具有變數結構描述的串流導向至輸出時,可能會發生下列行為:
- 如果偵測到結構描述變更,則會關閉目前的輸出檔案,並在新的結構描述上初始化新的輸出檔案。 當結構描述變更經常發生時,像這樣子分割檔案會嚴重降低輸出的速度。 此行為可能會嚴重影響作業的整體效能
- 如果無法偵測到結構描述變更,資料列很可能會遭到拒絕,而作業會因為無法輸出資料列而停滯。 巢狀資料行或多類型陣列屬於不會探索和拒絕的情況。
我們建議您考慮使用 Avro 或 Parquet 格式進行强制型別或寫入時結構描述的輸出,並將針對它們的查詢也這樣編寫 (統一結構描述的明確轉換和投影)。
如果需要產生多個結構描述,請考慮使用 WHERE
子句建立多個輸出,並將記錄分割成每個目的地。
Parquet 輸出批次處理視窗屬性
當您使用 Azure Resource Manager 範本部署或 REST API 時,兩個批次處理視窗屬性為:
timeWindow
每個批次的等候時間上限。 值應該是
Timespan
的字串。 例如,00:02:00
表示兩分鐘。 在此時間後,即使未符合資料列下限需求,也會將批次寫入輸出。 預設值為 1 分鐘,允許的上限為 2 小時。 如果您的 Blob 輸出具有路徑模式頻率,則等候時間不得高於分割區時間範圍。sizeWindow
這是每一批次中的資料列數目下限。 針對 Parquet,每個批次都會建立新的檔案。 目前的預設值為 2,000 個資料列,允許的上限為 10,000 個資料列。
只有 API 2017-04-01-preview 版才支援這些批次處理視窗屬性。 以下是 REST API 呼叫的 JSON 承載範例:
"type": "stream",
"serialization": {
"type": "Parquet",
"properties": {}
},
"timeWindow": "00:02:00",
"sizeWindow": "2000",
"datasource": {
"type": "Microsoft.Storage/Blob",
"properties": {
"storageAccounts" : [
{
"accountName": "{accountName}",
"accountKey": "{accountKey}",
}
],