Azure 事件中樞資料連線

Azure 事件中樞是巨量資料串流平台和事件擷取服務。 Azure Data Explorer 從客戶管理的事件中樞提供持續擷取。

事件中樞擷取管線會以數個步驟將事件傳送至 Azure Data Explorer。 您必須先在 Azure 入口網站 中建立事件中樞。 接著,您會在 Azure Data Explorer 中建立目標數據表,其中特定格式的數據將會使用指定的擷取屬性來內嵌。 事件中樞連線必須知道 事件路由。 根據 事件系統屬性,數據可能會內嵌在選取的屬性中。 建立事件中樞的連線,以 建立事件中樞傳送事件。 您可以透過 Azure 入口網站、使用 C#Python 以程式設計方式,或使用 Azure Resource Manager 範本來管理此程序。

如需 Azure Data Explorer 中數據擷取的一般資訊,請參閱 Azure Data Explorer 數據擷取概觀

Azure Data Explorer 數據連線驗證機制

警告

如果受控識別許可權已從數據源中移除,則會停用數據連線,且無法從數據源擷取數據。

  • 金鑰型資料連線:如果未在數據連線中指定受控識別,則聯機會自動預設為密鑰型驗證。 索引鍵型聯機會使用資源 連接字串 擷取數據,例如 Azure 事件中樞 連接字串。 Azure Data Explorer 會產生指定資源的資源 連接字串,並安全地將其儲存在數據連線中。 接著會使用 連接字串 從數據源擷取數據。

警告

如果密鑰已輪替,數據聯機會停用,且無法從數據源擷取數據。 若要修正此問題,請更新或重新建立數據連線。

資料格式

  • 數據會以 EventData 物件的形式從事件中樞讀取。

  • 請參閱支援的格式

    注意

  • 您可以使用 GZip 壓縮演算法來壓縮資料。 您可以使用擷取屬性,或在靜態資料連線設定中動態指定 Compression

    注意

    不支援壓縮格式 (Avro、Parquet、ORC、ApacheAvro 和 W3CLOGFILE) 。 壓縮資料不支援自訂編碼和內嵌的系統屬性

事件中樞屬性

Azure Data Explorer 支援下列事件中樞屬性:

  • 一組封閉的 擷取屬性,有助於將事件路由傳送至相關數據表。
  • 一組封閉 的事件系統屬性,可根據指定的對應內嵌在數據中。

注意

不支援擷取用來將元數據與事件產生關聯的事件中樞 自定義屬性。 如果您需要內嵌自定義屬性,請在事件數據的主體中傳送它們。 如需詳細資訊,請參閱 內嵌自定義屬性

內嵌屬性

內嵌屬性會指示內嵌程序、要路由資料的位置,以及處理方式。 您可以使用 EventData.Properties 來指定事件內嵌的內嵌屬性。 您可以設定下列屬性:

注意

屬性名稱會區分大小寫。

屬性 描述
資料庫 目標資料庫的區分大小寫名稱。 根據預設,數據會內嵌到與數據連線相關聯的目標資料庫中。 使用這個屬性覆寫預設資料庫,並將數據傳送至不同的資料庫。 若要這樣做,您必須先 將連線設定為多資料庫連線
資料表 現有目標數據表的區分大小寫名稱。 覆寫 Data Connection 窗格上的 Table 集。
格式 資料格式 覆寫 Data Connection 窗格上的 Data format 集。
IngestionMappingReference 要使用的現有內嵌對應名稱。 覆寫 Data Connection 窗格上的 Column mapping 集。
壓縮 資料壓縮、None (預設) 或 GZip 壓縮。
編碼 資料編碼,預設值為 UTF8。 可為任何 .NET 支援的編碼
標籤 要與內嵌資料產生關聯的標籤清單,其格式為 JSON 陣列字串。 使用標籤時,會影響效能
RawHeaders 表示事件來源是 Kafka,而 Azure Data Explorer 必須使用位元組數位還原串行化來讀取其他路由屬性。 忽略值。

注意

只會內嵌在建立資料連線之後排入佇列的事件。

事件路由

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

將事件數據路由傳送至替代資料庫

默認會關閉將數據路由傳送至替代資料庫。 若要將數據傳送至不同的資料庫,您必須先將連接設定為多資料庫連線。 您可以在 Azure 入口網站 Azure 入口網站C#PythonARM 範本中執行此動作。 用來允許資料庫路由的使用者、群組、服務主體或受控識別至少必須具有叢集的 參與者 角色和寫入許可權。

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

警告

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

將事件數據路由傳送至替代數據表

若要為每個事件指定替代數據表,請設定 數據表格式壓縮和對應 擷取屬性。 聯機會動態路由傳送 EventData.Properties 中指定的內嵌數據,並覆寫此事件的靜態屬性。

下列範例示範如何設定事件中樞詳細數據,並將天氣計量數據傳送至替代資料庫, (MetricsDB) 和數據表 (WeatherMetrics) 。 數據是 JSON 格式,而 mapping1 是在數據表 WeatherMetrics 上預先定義。

// This sample uses Azure.Messaging.EventHubs which is a .Net Framework library.
await using var producerClient = new EventHubProducerClient("<eventHubConnectionString>");
// Create the event and add optional "dynamic routing" properties
var eventData = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(
    new { Timestamp = DateTime.UtcNow, MetricName = "Temperature", Value = 32 }
)));
eventData.Properties.Add("Database", "MetricsDB");
eventData.Properties.Add("Table", "WeatherMetrics");
eventData.Properties.Add("Format", "json");
eventData.Properties.Add("IngestionMappingReference", "mapping1");
eventData.Properties.Add("Tags", "['myDataTag']");
var events = new[] { eventData };
// Send events
await producerClient.SendAsync(events);

事件系統屬性對應

系統屬性會儲存事件加入佇列時,由事件中樞服務所設定的屬性。 事件中樞的數據連線可以根據指定的對應,將一組選取的系統屬性內嵌到內嵌到數據表中的數據。

注意

  • json 和表格式格式 (支援內嵌系統屬性,例如JSON、、CSVMultiJSONSCsvPSVTSVSOHsvTSVE) 。
  • 使用不支援的格式 (i.e. TXT 或壓縮格式 Parquet時,例如 , Avro 等等 ) 數據仍會擷取,但會忽略屬性。
  • 設定事件中樞訊息壓縮時,不支援內嵌系統屬性。 在這種情況下,將會發出適當的錯誤,而且不會擷取數據。
  • 針對表格式資料,僅支援單一記錄事件訊息的系統屬性。
  • 針對 json 數據,多重記錄事件訊息也支援系統屬性。 在這種情況下,系統屬性只會新增至事件訊息的第一筆記錄。
  • 針對 CSV 對應,屬性會依照建立數據連接中所列的順序,在記錄的開頭加入。 請勿依賴這些屬性的順序,因為未來可能會變更。
  • 針對 JSON 對應,會根據系統屬性資料表中的屬性名稱來新增屬性。

事件中樞服務會公開下列系統屬性:

屬性 資料類型 描述
x-opt-enqueued-time datetime 事件加入佇列時的 UTC 時間
x-opt-sequence-number long 事件中樞之數據分割數據流內的事件邏輯序號
x-opt-offset string 事件中樞數據分割數據流的位移。 位移標識碼在事件中樞數據流的數據分割內是唯一的
x-opt-publisher string 如果訊息已傳送至發行者端點則為發行者名稱
x-opt-partition-key string 儲存事件對應資料分割的資料分割索引鍵

當您使用IoT Central事件中樞時,您也可以在承載中內嵌 IoT 中樞 系統屬性。 如需完整清單,請參閱 IoT 中樞 系統屬性

如果您在資料表的 [資料來源] 區段中選取了 [事件系統屬性],則必須在資料表結構描述和對應中包含屬性。

結構描述對應範例

資料表結構描述對應範例

如果您的資料包含三個資料行 (TimespanMetricValue) 且您包含的屬性為 x-opt-enqueued-timex-opt-offset,請使用下列命令來建立或修改資料表結構描述:

    .create-merge table TestTable (TimeStamp: datetime, Metric: string, Value: int, EventHubEnqueuedTime:datetime, EventHubOffset:string)

CSV 對應範例

執行下列命令,以將資料新增至記錄的開頭。 請注意序數值。

    .create table TestTable ingestion csv mapping "CsvMapping1"
    '['
    '   { "column" : "Timespan", "Properties":{"Ordinal":"2"}},'
    '   { "column" : "Metric", "Properties":{"Ordinal":"3"}},'
    '   { "column" : "Value", "Properties":{"Ordinal":"4"}},'
    '   { "column" : "EventHubEnqueuedTime", "Properties":{"Ordinal":"0"}},'
    '   { "column" : "EventHubOffset", "Properties":{"Ordinal":"1"}}'
    ']'

JSON 對應範例

使用系統屬性對應來新增資料。 執行下列命令:

    .create table TestTable ingestion json mapping "JsonMapping1"
    '['
    '    { "column" : "Timespan", "Properties":{"Path":"$.timestamp"}},'
    '    { "column" : "Metric", "Properties":{"Path":"$.metric"}},'
    '    { "column" : "Value", "Properties":{"Path":"$.value"}},'
    '    { "column" : "EventHubEnqueuedTime", "Properties":{"Path":"$.x-opt-enqueued-time"}},'
    '    { "column" : "EventHubOffset", "Properties":{"Path":"$.x-opt-offset"}}'
    ']'

事件中樞擷取 Avro 檔案的架構對應

取用事件中樞數據的其中一種方式是透過 Azure Blob 儲存體 或 Azure Data Lake Storage 中的 Azure 事件中樞 來擷取事件。 接著,您可以在 Azure Data Explorer 中使用事件方格數據連線來內嵌擷取檔案。

擷取檔案的架構與傳送至事件中樞的原始事件架構不同。 您應該考慮到此差異來設計目的地數據表架構。 具體而言,事件承載會以位元組數位的形式呈現在擷取檔案中,而且此陣列不會由Event Grid Azure Data Explorer 數據連線自動譯碼。 如需事件中樞 Avro 擷取數據檔案架構的詳細資訊,請參閱探索 Azure 事件中樞 中擷取的 Avro 檔案

若要正確譯碼事件承載:

  1. Body 擷取事件的欄位對應至目的地數據表中類型的 dynamic 數據行。
  2. 使用 unicode_codepoints_to_string () 函式,套用將位元組陣列轉換成可讀取字元串的更新原則

內嵌自定義屬性

從事件中樞擷取事件時,數據取自 body 事件數據物件的 區段。 不過,事件中properties自定義屬性是在 物件的 區段中定義,而且不會內嵌。 若要內嵌客戶屬性,您必須將它們內嵌至 物件區段中的數據 body

下列範例會比較事件數據物件,其中包含事件中樞所定義的自定義屬性customProperty, (左) ,以及擷取 (右) 所需的內嵌屬性。

{
"body":{
"value": 42
},
"properties":{
"customProperty": "123456789"
}
}
{
"body":{
"value": 42,
"customProperty": "123456789"
}
}

您可以使用下列其中一種方法,將自訂屬性內嵌至事件資料物件的 區段中的數據 body

跨區域事件中樞數據連線

為了獲得最佳效能,請在與叢集相同的區域中建立下列所有資源。 如果沒有其他替代方案,請考慮使用 進階專用 事件中樞層。 您可以 在這裡找到事件中樞層比較。

建立事件中樞

如果您還沒有事件中 樞,請建立事件中樞。 聯機到事件中樞可以透過 Azure 入口網站、以程序設計方式使用 C#PythonAzure Resource Manager 範本來管理。

注意

  • 建立事件中樞之後,動態新增分割區的能力僅適用於事件中樞進階和專用層。 設定分割區計數時,請考慮長期調整。
  • 每個取用者的取用者群組必須是唯一的。 建立專用於 Azure Data Explorer 連線的取用者群組。

傳送事件

請參閱產生數據的 範例應用程式 ,並將其傳送至事件中樞。

如需如何產生範例數據的範例,請參閱將數據從事件中樞內嵌至 Azure Data Explorer

設定異地災害復原解決方案

事件中樞提供 異地災害復原 解決方案。 Azure Data Explorer 不支援Alias事件中樞命名空間。 若要在您的解決方案中實作異地災害復原,請建立兩個事件中樞數據連線:一個用於主要命名空間,另一個用於次要命名空間。 Azure Data Explorer 會接聽兩個事件中樞連線。

注意

使用者必須負責實作從主要命名空間到次要命名空間的容錯移轉。