operator externaldata

externaldataOperator mengembalikan tabel yang skemanya ditentukan dalam kueri itu sendiri, dan yang datanya dibaca dari artefak penyimpanan eksternal, seperti blob di Azure Blob Storage atau file di Azure Data Lake Storage.

Catatan

Gunakan operator externaldata untuk mengambil tabel referensi kecil hingga 100 MB dari artefak penyimpanan eksternal. Operator ini tidak dirancang untuk volume data yang besar. Untuk mengambil data eksternal dalam volume besar, sebaiknya serap data eksternal ke Log Analytics sebagai log kustom. Operator ini tidak didukung ketika titik akhir publik dari artefak penyimpanan berada di belakang firewall.

Sintaks

externaldata(ColumnName:ColumnType [, ...] )
[StorageConnectionString [, ...] ]
[with(PropertyName=PropertyValue [, ...] )]

Argumen

  • ColumnName, ColumnType: Argumen untuk menentukan skema tabel. Sintaks yang sama dengan sintaks yang digunakan saat menentukan tabel di dalamnya .create table.

  • StorageConnectionString: String koneksi penyimpanan yang menjelaskan artefak penyimpanan yang menyimpan data untuk dikembalikan.

Catatan

Operator externaldata mendukung metode autentikasi Token Azure AD, Kunci akses, dan kunci Akses Bersama (SAS). Untuk informasi selengkapnya, lihat Metode autentikasi penyimpanan.

  • PropertyName, PropertyValue, ...: Properti tambahan yang menjelaskan cara menafsirkan data yang diambil dari penyimpanan, seperti yang tercantum di bawahproperti penyerapan.

Properti yang didukung saat ini adalah:

Properti Jenis Deskripsi
format string Format data. Jika tidak ditentukan, upaya dilakukan untuk mendeteksi format data dari ekstensi file (default ke CSV). Semua format data penyerapan didukung.
ignoreFirstRecord bool Jika diset ke true, menunjukkan bahwa rekaman pertama di setiap file diabaikan. Properti ini berguna ketika mengkueri file CSV dengan header.
ingestionMapping string Nilai string yang menunjukkan cara memetakan data dari file sumber ke kolom aktual dalam set hasil operator. Lihat pemetaan data.

Catatan

  • Operator ini tidak menerima input alur apa pun.
  • Batas kueri standar juga berlaku untuk kueri data eksternal.

Mengembalikan

externaldata Operator mengembalikan tabel data dari skema yang diberikan dengan data yang diurai dari artefak penyimpanan yang ditentukan, yang ditunjukkan oleh string koneksi penyimpanan.

Contoh

Mengambil daftar ID pengguna yang disimpan di Azure Blob Storage

Contoh berikut menunjukkan cara menemukan semua rekaman dalam tabel yang UserID kolomnya termasuk dalam kumpulan ID yang diketahui, disimpan (satu per baris) dalam file penyimpanan eksternal. Karena format data tidak ditentukan, format data yang terdeteksi adalah 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
    ]))
| ...

Kueri beberapa file data

Contoh berikut menanyakan beberapa file data yang disimpan dalam penyimpanan eksternal.

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

Contoh di atas dapat dianggap sebagai cara cepat untuk mengkueri beberapa file data tanpa menentukan tabel eksternal.

Catatan

Partisi data tidak dikenali oleh operator externaldata.

Mengkueri format data hierarkis

Untuk mengkueri format data hierarkis, seperti JSON, Parquet, Avro, atau ORC, ingestionMapping harus ditentukan dalam properti operator. Dalam contoh ini, ada file JSON yang disimpan di Azure Blob Storage dengan konten berikut:

{
  "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"   
  }   
}
...

Untuk mengkueri file ini menggunakan externaldata operator, memetakan data harus ditentukan. Pemetaan menentukan cara memetakan bidang JSON ke kolom hasil operator:

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"}}]')

MultiJSONFormat digunakan di sini karena rekaman JSON tunggal diperluas menjadi beberapa baris.

Untuk info selengkapnya tentang memetakan sintaksis, lihat memetakan data.