事件方格資料連線

事件方格內嵌是接聽 Azure 儲存體的管線,並會在訂閱的事件發生時,更新 Azure 資料總管以提取資訊。 Azure Data Explorer 提供從 Azure 儲存體(Blob 儲存體和 ADLSv2)持續擷取資料,並可透過 Azure 事件方格 訂閱 Blob 建立或重新命名通知,再經由 Azure 事件中樞將這些通知串流至 Azure Data Explorer。

Event Grid 的資料擷取管線會歷經數個步驟。 您會在 Azure 資料總管中建立目標資料表,以便將 特定格式的資料 擷取至其中。 然後在 Azure 數據總管中建立事件方格數據連線。 事件方格數據連線必須知道 事件路由 資訊,例如要傳送數據的數據表和數據表對應。 您也可以指定 內嵌屬性,用來描述要內嵌的資料、目標資料表和對應關係。 您可以產生範例數據並上傳 Blob,或重新命名 Blob 以測試您的連線。 擷取之後刪除 Blob 。

事件方格擷取可以透過 Azure 入口網站、使用擷取精靈、以程序設計方式搭配 C# 或 Python,或使用 Azure Resource Manager 範本來管理。

如需 Azure 數據總管中數據擷取的一般資訊,請參閱 Azure 數據總管數據擷取概觀。

事件方格數據連線驗證機制

  • 金鑰型資料連線:如果未為數據連線指定受控識別驗證,則聯機會自動預設為密鑰型驗證。 以金鑰為基礎的連線會使用資源連接字串來擷取資料,例如 Azure 事件中樞 連接字串。 Azure 數據總管會取得指定資源的資源 連接字串,並安全地加以儲存。 接著會使用 連接字串 從數據源擷取數據。

    警告

    如果輪替密鑰,數據連線將無法再運作,而且無法從數據源擷取數據。 若要修正此問題,請更新或重新建立數據連線。

資料格式

  • 請參閱 支援的格式。
  • 請參閱 支援的壓縮。
    • 原始未壓縮的資料大小應包含在 Blob 中繼資料中,否則 Azure Data Explorer 會自行估算。 每個檔案的擷取未壓縮大小限製為6 GB。

      附註

      您可以在 Azure 儲存體帳戶上為 BlobStorage、StorageV2 或 Data Lake Storage Gen2 設定 Event Grid 通知訂閱。

內嵌屬性

您可以透過 Blob 元數據指定 Blob 擷取的擷取屬性 。 您可以設定下列屬性:

屬性 說明
rawSizeBytes 未經壓縮的數據大小。 針對 Avro/ORC/Parquet,這是套用格式特定壓縮之前的大小。 將此屬性設定為未壓縮的數據大小,以位元組為單位提供原始數據大小。
kustoDatabase 目標資料庫名稱(區分大小寫)。 根據預設,數據會內嵌至與數據連線相關聯的目標資料庫。 使用這個屬性來覆寫預設資料庫,並將數據傳送至不同的資料庫。 若要這樣做,您必須先 將連線設定為多資料庫連線。
kustoTable 現有目標數據表的區分大小寫名稱。 覆寫在 Data Connection 窗格上設定的 Table。
kustoDataFormat 資料格式。 覆寫在 Data Connection 窗格上設定的 Data format。
kustoIngestionMappingReference 要使用的現有擷取對應名稱。 覆寫在 Data Connection 窗格上設定的 Column mapping。
kustoIgnoreFirstRecord 如果設定為 true,Kusto 會忽略 Blob 的第一個數據列。 在表格格式資料(CSV、TSV 或類似格式)中用來忽略標頭。
kustoExtentTags 字串,表示 將附加至結果範圍的標記 。
kustoCreationTime 覆寫 Blob 的 Extent 建立時間,格式為 ISO 8601 字串。 用於回填。

事件路由

當您建立叢集的數據連線時,您可以指定要傳送內嵌數據的位置路由。 預設路由會傳送至與目標資料庫相關聯之 連接字串 中指定的目標數據表。 數據的預設路由也稱為 靜態路由。 您可以使用事件資料屬性來指定資料的替代路由。

將事件資料傳送到另一個資料庫

將資料路由至替代資料庫的功能預設為關閉。 若要將數據傳送至不同的資料庫,您必須先將連接設定為多資料庫連接。 您可以在 Azure 入口網站、C#、Python 或 ARM 範本中執行此動作。 用來允許資料庫路由的使用者、群組、服務主體或受控識別,至少必須具有 叢集的參與者 角色和寫入許可權。 如需詳細資訊,請參閱 建立 Azure 數據總管的事件方格數據連線。

若要指定替代資料庫,請設定資料庫擷取屬性。

警告

指定替代資料庫而不將連線設定為多資料庫資料連線會導致擷取失敗。

將事件資料傳送至替代資料表

設定與 Azure 資料總管叢集的 Blob 記憶體連線時,請指定目標資料表屬性:

  • 資料表名稱
  • 數據格式
  • 對應

您也可以使用 Blob 元數據,為每個 Blob 指定目標資料表屬性。 資料會依照 擷取屬性 的指定動態路由。

下列範例示範如何在上傳 Blob 元數據之前,先在 Blob 元數據上設定擷取屬性。 Blob 會被路由到不同的資料表。

此外,您可以指定目標資料庫。 事件方格數據連線是在特定資料庫的內容內建立。 因此,此資料庫是數據連線的預設資料庫路由。 若要將數據傳送至不同的資料庫,請設定 「KustoDatabase」 擷取屬性,並將數據連線設定為多資料庫數據連接。 預設會停用將資料路由至另一個資料庫的功能(不允許)。 設定與數據連線資料庫不同的資料庫擷取屬性,而不允許數據路由傳送至多個資料庫(將連接設定為多資料庫數據連接),將導致擷取失敗。

如需詳細資訊,請參閱 上傳 Blob。

var container = new BlobContainerClient("<storageAccountConnectionString>", "<containerName>");
await container.CreateIfNotExistsAsync();
var blob = container.GetBlobClient("<blobName>");
// Blob is dynamically routed to table `Events`, ingested using `EventsMapping` data mapping
await blob.SetMetadataAsync(
    new Dictionary<string, string>
    {
        { "rawSizeBytes", "4096" }, // the uncompressed size is 4096 bytes
        { "kustoTable", "Events" },
        { "kustoDataFormat", "json" },
        { "kustoIngestionMappingReference", "EventsMapping" },
        { "kustoDatabase", "AnotherDB" }
    }
);
await blob.UploadAsync(BinaryData.FromString(File.ReadAllText("<filePath>")));

上傳 Blob 物件

您可以從本機檔案建立 Blob、將擷取屬性設定為 Blob 元數據,然後上傳它。 如需範例,請參閱 使用事件方格數據連線。

附註

  • 強烈建議使用 BlockBlob 來產生數據,因為using AppendBlob 可能會導致非預期的行為。
  • 使用 Azure Data Lake Gen2 記憶體 SDK 需要使用 CreateFile 來上傳檔案,最後 Flush 將 close 參數設定為 true。 如需 資料湖 Gen2 SDK 正確使用方式的詳細範例,請參閱 使用事件方格數據連線。
  • 已啟用階層式命名空間功能的儲存體帳戶不支援在 CopyBlob 操作後觸發資料擷取。
  • 當事件中樞端點未確認收到事件時,Azure 事件方格 會啟用重試機制。 如果這次重試傳遞失敗,Event Grid 可透過無法傳遞信件處理程序,將未送達的事件傳遞至儲存體帳戶。 如需詳細資訊,請參閱 Event Grid 訊息傳遞與重試。
  • 不建議使用「OpenWrite」API 來寫入 Blob,因為這樣會觸發空的 Blob 的通知,並引發空的 Blob 錯誤。 此外,僅清空流一次,以防止重複通知和相同 Blob 的多次匯入。
  • Azure 資料總管會嘗試篩選掉事件方格或儲存體等上游服務所傳送之相同 Blob 的重複通知。 當偵測到重複事件時,它會略過擷取並記錄錯誤 BlobAlreadyReceived_DuplicateEventGridNotification,這表示 Blob 已處理完畢。

重新命名 Blob 物件

使用 ADLSv2 時,您可以將 Blob 重新命名為觸發 Blob 擷取至 Azure 數據總管。 例如,請參閱 重新命名 Blob。

附註

  • 在 ADLSv2 中,可以重新命名目錄,但這不會觸發 blob renamed 事件,也不會觸發匯入該目錄內 Blob 的作業。 若要在重新命名之後內嵌 Blob,請直接重新命名所需的 Blob。
  • 如果您在建立數據連線或手動建立事件方格資源時定義篩選來追蹤特定主題,這些篩選會套用至目的地檔案路徑。

使用記憶體生命週期刪除 Blob

在 Azure 資料總管中的邏輯架構不會在引入後刪除 Blob。 使用 Azure Blob 記憶體生命週期 來管理 Blob 刪除。 建議將這些 Blob 保留三到五天。

已知的事件方格問題

在沒有本機驗證的情況下運作

如果包含用於串流通知之事件中樞的 Event Hubs 命名空間已停用本機驗證,請使用下列步驟,確保資料可透過受控識別從儲存體正確流向事件中樞:

  1. 將系統指派的受控識別指派給儲存體帳戶的 Event Grid 系統主題。 如需詳細資訊,請參閱 為系統主題啟用受控識別。
  2. 將事件中樞上的 Azure 事件中樞 數據傳送者角色指派給受控識別發件人許可權。 如需詳細資訊,請參閱 將身分識別新增至目的地上的 Azure 角色。
  3. 請確定事件方格訂用帳戶使用受控識別進行事件傳遞。 如需詳細資訊,請參閱 建立使用身分識別的事件訂用帳戶。

此外,將事件方格數據連線設定為使用受控識別驗證,讓 Azure 數據總管可以從事件中樞接收通知。

設定從 Azure Data Explorer 匯出檔案的 Event Grid 內嵌

使用 Azure 數據總管匯出用於事件方格擷取的檔案時,請注意:

  • 如果提供給匯出命令的連接字串,或提供給 external table 的連接字串,是 ADLS Gen2 format 中的連接字串(例如 abfss://filesystem@accountname.dfs.core.windows.net),但儲存體帳戶未啟用階層式命名空間,則不會觸發 Event Grid 通知。
  • 如果帳戶未啟用階層命名空間,連接字串必須使用 Blob 儲存體格式(例如:https://accountname.blob.core.windows.net)。 即使使用ADLS Gen2連接字串,匯出仍如預期般運作,但不會觸發通知,事件方格擷取將無法運作。

模擬來自自定義元件的記憶體事件

使用自訂元件模擬 Azure 儲存體事件時,模擬事件必須嚴格遵守 Azure Blob 儲存體事件結構描述,因為 Azure 資料總管會捨棄事件方格 SDK 無法剖析的事件。