Share via


來自 Azure 串流分析的輸出

Azure 串流分析「作業」是由輸入、查詢與輸出所組成。 有多種輸出類型可供您傳送轉換的資料。 本文列出支援的串流分析輸出。 在您設計串流分析查詢時,請使用 INTO 子句來參考輸出的名稱。 您可以針對每個作業使用單一輸出,或視需要在查詢中新增多個 INTO 子句,以對每個串流作業使用多個輸出。

若要建立、編輯及測試串流分析作業輸出,您可以使用 Azure portalAzure PowerShell.NET APIREST APIVisual StudioVisual 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 時,兩個批次處理視窗屬性為:

  1. timeWindow

    每個批次的等候時間上限。 值應該是 Timespan 的字串。 例如,00:02:00 表示兩分鐘。 在此時間後,即使未符合資料列下限需求,也會將批次寫入輸出。 預設值為 1 分鐘,允許的上限為 2 小時。 如果您的 Blob 輸出具有路徑模式頻率,則等候時間不得高於分割區時間範圍。

  2. 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}",
          }
          ],

下一步