Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Semantik grafik di Kusto memungkinkan Anda memodelkan dan mengkueri data sebagai jaringan yang saling terhubung, membuatnya intuitif untuk menganalisis hubungan kompleks seperti hierarki organisasi, jejaring sosial, dan jalur serangan. Tidak seperti kueri relasional tradisional yang mengandalkan gabungan, grafik menggunakan hubungan langsung antar entitas untuk melintasi koneksi secara efisien.
Dalam tutorial ini, Anda akan belajar cara:
- Membuat grafik sementara menggunakan operator make-graph
- Kueri graf untuk menemukan hubungan menggunakan pencocokan graf
- Membangun model grafik persisten untuk analisis yang dapat digunakan kembali
- Membandingkan pendekatan grafik sementara versus persisten
- Membuat grafik sementara menggunakan operator make-graph
- Kueri graf untuk menemukan hubungan menggunakan pencocokan graf
- Membandingkan pendekatan grafik sementara versus persisten
Jika Anda tidak memiliki kluster Azure Data Explorer, buat kluster gratis sebelum memulai tutorial.
Prasyarat
- Akun Microsoft atau identitas pengguna Microsoft Entra untuk masuk ke kluster bantuan
- Ruang kerja Fabric dengan kapasitas yang diaktifkan Microsoft Fabric
Mengakses lingkungan kueri Anda
Buka Antarmuka Pengguna Web Azure Data Explorer untuk mengakses kluster bantuan untuk tutorial ini.
Navigasi ke ruang kerja Microsoft Fabric Anda dan buka database KQL untuk menjalankan kueri.
Navigasi ke halaman perburuan tingkat lanjut untuk mulai mengkueri data Microsoft Azure Sentinel.
Arahkan ke Log atau ke ruang kerja Analitik Log di portal Azure untuk mulai menganalisis data Azure Monitor.
Membuat grafik sementara dengan data organisasi
Di bagian ini, Anda akan membuat grafik pertama menggunakan data organisasi sampel. Grafik sementara dibuat secara dinamis selama eksekusi kueri menggunakan make-graph
operator, membuatnya sempurna untuk analisis dan eksplorasi ad-hoc.
Anda akan bekerja dengan struktur perusahaan sederhana di mana karyawan melapor ke manajer. Hierarki organisasi ini memberikan contoh intuitif untuk memahami hubungan grafik:
Buat struktur grafik organisasi menggunakan data hubungan karyawan dan pelaporan:
// Create sample employee data
let employees = datatable(name:string, role:string, age:long)
[
"Alice", "CEO", 45,
"Bob", "Engineering Manager", 35,
"Carol", "Marketing Manager", 38,
"Dave", "Developer", 28,
"Eve", "Developer", 26,
"Frank", "Marketing Specialist", 30
];
// Create reporting relationships
let reports = datatable(employee:string, manager:string)
[
"Bob", "Alice",
"Carol", "Alice",
"Dave", "Bob",
"Eve", "Bob",
"Frank", "Carol"
];
// Build the graph and explore it
reports
| make-graph employee --> manager with employees on name
| graph-to-table nodes
Keluaran
Nama | peranan | usia |
---|---|---|
Alice | Kepala Eksekutif | 45 |
Bob | Manajer Teknik | 35 |
Carol | Manajer Pemasaran | 38 |
Dave | Pengembang | 28 |
Hawa | Pengembang | 26 |
Frank | Spesialis Pemasaran | 30 |
Hubungan kueri dengan pola pencocokan grafik
Sekarang Anda akan belajar menggunakan graph-match
operator untuk menemukan pola tertentu dalam grafik organisasi Anda. Operator graph-match
mencari hubungan dan koneksi dalam struktur grafik.
Pertama, temukan semua karyawan yang langsung melapor ke Alice dengan mencocokkan pola hubungan pelaporan segera:
let employees = datatable(name:string, role:string, age:long)
[
"Alice", "CEO", 45,
"Bob", "Engineering Manager", 35,
"Carol", "Marketing Manager", 38,
"Dave", "Developer", 28,
"Eve", "Developer", 26,
"Frank", "Marketing Specialist", 30
];
let reports = datatable(employee:string, manager:string)
[
"Bob", "Alice",
"Carol", "Alice",
"Dave", "Bob",
"Eve", "Bob",
"Frank", "Carol"
];
reports
| make-graph employee --> manager with employees on name
| graph-match (alice)<-[reports]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role, age = employee.age
Output laporan dari bawahan langsung
karyawan | peranan | usia |
---|---|---|
Bob | Manajer Teknik | 35 |
Carol | Manajer Pemasaran | 38 |
Selanjutnya, temukan semua karyawan di seluruh organisasi Alice, termasuk laporan tidak langsung, menggunakan tepi panjang variabel dengan *1..3
untuk melintasi beberapa tingkat hierarki:
let employees = datatable(name:string, role:string, age:long)
[
"Alice", "CEO", 45,
"Bob", "Engineering Manager", 35,
"Carol", "Marketing Manager", 38,
"Dave", "Developer", 28,
"Eve", "Developer", 26,
"Frank", "Marketing Specialist", 30
];
let reports = datatable(employee:string, manager:string)
[
"Bob", "Alice",
"Carol", "Alice",
"Dave", "Bob",
"Eve", "Bob",
"Frank", "Carol"
];
reports
| make-graph employee --> manager with employees on name
| graph-match (alice)<-[reports*1..3]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role, reportingLevels = array_length(reports)
Hasil semua anggota organisasi
karyawan | peranan | tingkat pelaporan |
---|---|---|
Bob | Manajer Teknik | 1 |
Carol | Manajer Pemasaran | 1 |
Dave | Pengembang | 2 |
Hawa | Pengembang | 2 |
Frank | Spesialis Pemasaran | 2 |
Membuat model grafik persisten
Nota
Fitur ini saat ini dalam pratinjau publik. Fungsionalitas dan sintaksis dapat berubah sebelum Ketersediaan Umum.
Grafik persisten disimpan dalam database dan dapat dikueri berulang kali tanpa membangun kembali struktur grafik. Sekarang Anda akan membuat struktur organisasi yang sama sebagai graf persisten untuk performa dan penggunaan ulang yang lebih baik.
Buat fungsi yang mengembalikan data sampel Anda, lalu tentukan struktur model grafik:
// Create a function that returns employee data
.create function Employees() {
datatable(name: string, role: string, age: long)
[
"Alice", "CEO", 45,
"Bob", "Engineering Manager", 35,
"Carol", "Marketing Manager", 38,
"Dave", "Developer", 28,
"Eve", "Developer", 26,
"Frank", "Marketing Specialist", 30
]
}
// Create a function that returns reporting relationships
.create function Reports() {
datatable(employee: string, manager: string)
[
"Bob", "Alice",
"Carol", "Alice",
"Dave", "Bob",
"Eve", "Bob",
"Frank", "Carol"
]
}
Tentukan model grafik dengan simpul dan skema tepi:
.create-or-alter graph_model OrganizationGraph ```
{
"Schema": {
"Nodes": {
"Employee": {
"name": "string",
"role": "string",
"age": "long"
}
},
"Edges": {
"ReportsTo": {
}
}
},
"Definition": {
"Steps": [
{
"Kind": "AddNodes",
"Query": "Employees()",
"NodeIdColumn": "name",
"Labels": ["Employee"]
},
{
"Kind": "AddEdges",
"Query": "Reports()",
"SourceColumn": "employee",
"TargetColumn": "manager",
"Labels": ["ReportsTo"]
}
]
}
}
```
Buat rekam jepret grafik untuk mewujudkan model ke dalam struktur yang dapat dikueri:
.make graph_snapshot OrganizationGraph_v1 from OrganizationGraph
Mengkueri grafik persisten Anda
Kueri grafik persisten menggunakan pola yang sama dengan grafik sementara. Temukan semua karyawan yang melapor ke Alice:
graph("OrganizationGraph")
| graph-match (alice)<-[reports]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role, age = employee.age
Temukan semua karyawan di organisasi Alice termasuk laporan tidak langsung:
graph("OrganizationGraph")
| graph-match (alice)<-[reports*1..3]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role, reportingLevels = array_length(reports)
Kueri versi rekam jepret tertentu jika diperlukan:
graph("OrganizationGraph", "OrganizationGraph_v1")
| graph-match (alice)<-[reports*1..3]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role
Membandingkan grafik sementara dan persisten
Memahami kapan menggunakan setiap pendekatan membantu Anda memilih metode yang tepat untuk kebutuhan analisis Anda:
Aspek | Grafik Sementara | Graf Persisten |
---|---|---|
Penciptaan |
make-graph operator pada saat kueri |
.create-or-alter graph_model + .make graph_snapshot |
Penyimpanan | Proses dalam memori saat eksekusi kueri | Disimpan dalam database |
Dapat Digunakan Kembali | Harus dibangun ulang untuk setiap pertanyaan | Kueri berulang kali tanpa membangun ulang |
Kinerja | Bagus untuk himpunan data yang lebih kecil | Dioptimalkan untuk grafik besar dan kompleks |
Skenario penggunaan | Analisis ad-hoc, eksplorasi | Analisis produksi, permintaan berulang |
Batas memori | Dibatasi oleh memori simpul | Dapat menangani himpunan data yang lebih besar |
Membersihkan sumber daya
Jika Anda tidak akan terus menggunakan model grafik persisten, hapus dengan perintah berikut:
Jatuhkan model grafik:
.drop graph_model OrganizationGraph
Hilangkan fungsi pembantu:
.drop function Employees .drop function Reports
Grafik sementara secara otomatis dibersihkan saat kueri selesai, sehingga tidak diperlukan pembersihan tambahan untuk contoh tersebut.
Langkah selanjutnya
Sekarang setelah Anda memahami dasar-dasar semantik grafik di Kusto, lanjutkan ke skenario dan pengoptimalan yang lebih kompleks:
Anda juga dapat menjelajahi artikel terkait ini:
- Referensi operator grafik - Panduan lengkap untuk semua operator grafik yang tersedia
- Pengelolaan model graf - Mendalami model graf persisten
- Grafik jalur terpendek - Temukan jalur optimal antar entitas
- Kueri grafik tingkat lanjut - Pola analisis kompleks dan kasus penggunaan
- Referensi operator grafik - Panduan lengkap untuk semua operator grafik yang tersedia
- Grafik jalur terpendek - Temukan jalur optimal antar entitas
- Kueri grafik tingkat lanjut - Pola analisis kompleks dan kasus penggunaan