共用方式為


externaldata 運算子

適用於:✅Microsoft網狀架構Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel

externaldata運算符會傳回數據表,其架構定義於查詢本身,以及其數據是從外部記憶體成品讀取,例如 Azure Blob 儲存體 中的 Blob 或 Azure Data Lake Storage 中的檔案。

注意

操作員externaldata支援一組特定的記憶體服務,如記憶體 連接字串所列。

注意

操作員 externaldata 支持共用存取簽章(SAS) 金鑰、存取密鑰,以及Microsoft Entra Token 驗證方法。 如需詳細資訊,請參閱 記憶體驗證方法

注意

externaldata使用 運算符,從外部記憶體成品擷取最多 100 MB 的小參考數據表。 運算子不是針對大型數據磁碟區所設計。 若要擷取大量的外部數據,建議將 外部數據內嵌至Log Analytics做為自定義記錄。 當記憶體成品的公用端點位於防火牆後方時,不支援此運算符。

語法

externaldatacolumnName:columnType [, ...] )[ (storageConnectionString [, ...] ] [with ( propertyName = propertyValue [, ...])]

深入瞭解 語法慣例

參數

姓名 類型​​ 必要 描述
columnNamecolumnType string ✔️ 數據行名稱及其類型的清單。 此清單會定義資料表的架構。
storageConnectionString string ✔️ 查詢之記憶體成品的記憶體 連接字串
propertyNamepropertyValue string 選擇性 支援的屬性 清單,決定如何解譯從記憶體擷取的數據。

支援的屬性

屬性 類型​ 描述
format string 數據格式。 如果未指定,則會嘗試從擴展名偵測數據格式。 預設值為 CSV。 支援所有 擷取數據格式
ignoreFirstRecord bool 如果設定為 true,則會忽略每個檔案中的第一筆記錄。 使用標頭查詢 CSV 檔案時,這個屬性將發揮作用。
ingestionMapping string 指出如何將來源檔案中的數據對應至運算子結果集中的實際數據行。 請參閱資料對應

注意

此運算子不接受任何管線輸入。

標準 查詢限制 也適用於外部數據查詢。

傳回

運算符externaldata會傳回指定架構的數據表,該數據表的數據是從指定的記憶體成品剖析,由記憶體 連接字串 表示。

範例

擷取儲存在 Azure Blob 儲存體的使用者標識碼清單

下列範例示範如何在數據表中尋找所有記錄,其 UserID 數據行落在外部儲存盤案中保留的已知標識符集(每行一行)。 由於未指定資料格式,因此偵測到的數據格式為 TXT

Users
| where UserID in ((externaldata (UserID:string) [
    @"https://storageaccount.blob.core.windows.net/storagecontainer/users.txt" 
      h@"?...SAS..." // Secret token needed to access the blob
    ]))
| ...

查詢多個數據檔

下列範例會查詢儲存在外部記憶體中的多個數據檔。

externaldata(Timestamp:datetime, ProductId:string, ProductDescription:string)
[
  h@"https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/01/part-00000-7e967c99-cf2b-4dbb-8c53-ce388389470d.csv.gz?...SAS...",
  h@"https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/02/part-00000-ba356fa4-f85f-430a-8b5a-afd64f128ca4.csv.gz?...SAS...",
  h@"https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/03/part-00000-acb644dc-2fc6-467c-ab80-d1590b23fc31.csv.gz?...SAS..."
]
with(format="csv")
| summarize count() by ProductId

上述範例可視為快速查詢多個數據檔的方式,而不需定義 外部數據表

注意

運算子無法辨識 externaldata 數據分割。

查詢階層式數據格式

若要查詢階層式數據格式,例如 JSONParquetAvroORCingestionMapping 必須在運算符屬性中指定。 在此範例中,有一個 JSON 檔案會以下列內容儲存在 Azure Blob 儲存體:

{
  "timestamp": "2019-01-01 10:00:00.238521",   
  "data": {    
    "tenant": "e1ef54a6-c6f2-4389-836e-d289b37bcfe0",   
    "method": "RefreshTableMetadata"   
  }   
}   
{
  "timestamp": "2019-01-01 10:00:01.845423",   
  "data": {   
    "tenant": "9b49d0d7-b3e6-4467-bb35-fa420a25d324",   
    "method": "GetFileList"   
  }   
}
...

若要使用 externaldata 運算子查詢此檔案,必須指定數據對應。 對應會指示如何將 JSON 欄位對應至運算子結果集數據行:

externaldata(Timestamp: datetime, TenantId: guid, MethodName: string)
[ 
   h@'https://mycompanystorage.blob.core.windows.net/events/2020/09/01/part-0000046c049c1-86e2-4e74-8583-506bda10cca8.json?...SAS...'
]
with(format='multijson', ingestionMapping='[{"Column":"Timestamp","Properties":{"Path":"$.timestamp"}},{"Column":"TenantId","Properties":{"Path":"$.data.tenant"}},{"Column":"MethodName","Properties":{"Path":"$.data.method"}}]')

MultiJSON因為單一 JSON 記錄會跨越多行,因此會在這裡使用格式。

如需對應語法的詳細資訊,請參閱 數據對應