Menggabungkan dan mengoptimalkan data

Selesai

Organisasi sering menyusun berbagai jenis informasi dari banyak sumber. Informasi disimpan dalam sejumlah besar tabel. Terkadang, Anda mungkin perlu menggabungkan tabel berdasarkan hubungan logis di antara mereka, untuk analisis atau pelaporan yang lebih mendalam. Dalam skenario perusahaan ritel, Anda menggunakan tabel untuk pelanggan, produk, dan informasi penjualan.

Dalam modul ini, Anda mempelajari berbagai cara untuk menggabungkan data dalam kueri Kusto untuk memberi anggota tim Anda informasi yang mereka butuhkan untuk meningkatkan kesadaran produk dan meningkatkan penjualan.

Memahami data Anda

Sebelum Anda mulai menulis kueri yang menggabungkan informasi dari tabel, Anda perlu memahami data Anda. Saat Anda bekerja dengan kueri Kusto, Anda ingin menganggap tabel sebagai milik salah satu dari dua kategori secara luas:

  • Tabel fakta: Tabel yang catatannya tidak dapat diubah faktanya, seperti tabel SalesFact dalam skenario perusahaan ritel. Dalam tabel ini, rekaman ditambahkan secara progresif dengan cara streaming atau dalam potongan besar. Rekaman tetap berada dalam tabel hingga dihapus dan tidak pernah diperbarui.
  • Tabel dimensi: Tabel yang rekamannya merupakan dimensi yang dapat diubah, seperti tabel Pelanggan dan Produk dalam skenario perusahaan ritel. Tabel ini menyimpan data referensi, seperti tabel pencarian dari pengidentifikasi entitas ke propertinya. Tabel dimensi tidak diperbarui secara berkala dengan data baru.

Dalam skenario perusahaan ritel kami, Anda menggunakan tabel dimensi untuk memperkaya tabel SalesFact dengan informasi tambahan atau untuk memberikan lebih banyak opsi untuk memfilter data untuk kueri.

Anda juga ingin memahami volume data yang sedang Anda kerjakan dan strukturnya, atau skemanya (nama dan jenis kolom). Anda bisa menjalankan kueri berikut untuk mendapatkan informasi tersebut dengan mengganti TABLE_NAME dengan nama tabel yang Anda periksa:

  • Untuk mendapatkan jumlah rekaman dalam tabel, gunakan count operator:

    TABLE_NAME
    | count
    
  • Untuk mendapatkan skema tabel, gunakan getschema operator:

    TABLE_NAME
    | getschema
    

Menjalankan kueri ini pada tabel fakta dan dimensi dalam skenario perusahaan ritel memberi Anda informasi seperti contoh berikut:

Table Data Skema
SalesFact 2,832,193 - SalesAmount (nyata)
- TotalCost (nyata)
- DateKey (tanggalwaktu)
- ProductKey (panjang)
- CustomerKey (panjang)
Pelanggan 18,484 - CityName (string)
- CompanyName (string)
- ContinentName (string)
- CustomerKey (panjang)
- Pendidikan (string)
- FirstName (string)
- Jenis kelamin (string)
- LastName (string)
- MaritalStatus (string)
- Pekerjaan (string)
- RegionCountryName (string)
- StateProvinceName (string)
Produk 2,517 - ProductName (string)
- Produsen (string)
- ColorName (string)
- ClassName (string)
- ProductCategoryName (string)
- ProductSubcategoryName (string)
- ProductKey (panjang)

Dalam tabel, kami menyoroti pengidentifikasi unik CustomerKey dan ProductKey yang digunakan untuk menggabungkan rekaman antar tabel.

Memahami kueri multi-tabel

Setelah menganalisis data, Anda perlu memahami cara menggabungkan tabel untuk memberikan informasi yang Anda butuhkan. Kueri Kusto menyediakan beberapa operator yang dapat Anda gunakan untuk menggabungkan data dari beberapa tabel, termasuk lookupoperator , join, dan union .

Operator join menggabungkan baris dua tabel dengan mencocokkan nilai kolom yang ditentukan dari setiap tabel. Tabel yang dihasilkan tergantung pada jenis gabungan yang Anda gunakan. Misalnya, jika Anda menggunakan gabungan dalam, tabel memiliki kolom yang sama dengan tabel kiri (terkadang disebut tabel luar), ditambah kolom dari tabel kanan (terkadang disebut tabel dalam). Anda mempelajari selengkapnya tentang jenis gabungan di bagian berikutnya. Untuk performa terbaik, jika satu tabel selalu lebih kecil dari tabel lainnya, gunakan sebagai sisi join kiri operator.

Operator lookup adalah implementasi join khusus operator yang mengoptimalkan performa kueri di mana tabel fakta diperkaya dengan data dari tabel dimensi. Ini memperluas tabel fakta dengan nilai yang dicari dalam tabel dimensi. Untuk performa terbaik, sistem secara default mengasumsikan bahwa tabel kiri adalah tabel (fakta) yang lebih besar, dan tabel kanan adalah tabel (dimensi) yang lebih kecil. Asumsi ini sama persis dengan asumsi yang digunakan oleh join operator.

Operator union mengembalikan semua baris dari dua tabel atau lebih. Ini berguna saat Anda ingin menggabungkan data dari beberapa tabel.

Fungsi ini materialize() menyimpan hasil dalam eksekusi kueri untuk penggunaan kembali berikutnya dalam kueri. Ini seperti mengambil rekam jepret hasil subkueri dan menggunakannya beberapa kali dalam kueri. Fungsi ini berguna dalam mengoptimalkan kueri untuk skenario di mana hasilnya:

  • Mahal untuk dihitung
  • Bersifat nondeterministik

Segera, Anda mempelajari lebih lanjut tentang berbagai operator penggabungan tabel dan materialize() fungsi, dan cara menggunakannya.

Jenis gabungan

Diagram showing query join kinds.

Ada berbagai jenis gabungan yang dapat dilakukan yang memengaruhi skema dan baris dalam tabel yang dihasilkan. Tabel berikut ini memperlihatkan jenis gabungan yang didukung oleh Bahasa Kueri Kusto dan skema dan baris yang mereka kembalikan:

Jenis gabungan Deskripsi Ilustrasi
innerunique (default) Gabungan dalam dengan deduplikasi sisi kiri
Skema: Semua kolom dari kedua tabel, termasuk kunci yang cocok
Baris: Semua baris deduplikasi dari tabel kiri yang cocok dengan baris dari tabel kanan
inner Gabungan dalam standar
Skema: Semua kolom dari kedua tabel, termasuk kunci yang cocok
Baris: Hanya baris yang cocok dari kedua tabel
leftouter Gabungan luar kiri
Skema: Semua kolom dari kedua tabel, termasuk kunci yang cocok
Baris: Semua rekaman dari tabel kiri dan hanya baris yang cocok dari tabel kanan
rightouter Gabungan luar kanan
Skema: Semua kolom dari kedua tabel, termasuk kunci yang cocok
Baris: Semua rekaman dari tabel kanan dan hanya baris yang cocok dari tabel kiri
fullouter Gabungan luar penuh
Skema: Semua kolom dari kedua tabel, termasuk kunci yang cocok
Baris: Semua rekaman dari kedua tabel dengan sel yang tidak cocok diisi dengan null
leftsemi Semi-gabungan kiri
Skema: Semua kolom dari tabel kiri
Baris: Semua rekaman dari tabel kiri yang cocok dengan rekaman dari tabel kanan
leftanti, , antileftantisemi Anti join kiri dan varian semi
Skema: Semua kolom dari tabel kiri
Baris: Semua rekaman dari tabel kiri yang tidak cocok dengan rekaman dari tabel kanan
rightsemi Semi-gabungan kanan
Skema: Semua kolom dari tabel kanan
Baris: Semua rekaman dari tabel kanan yang cocok dengan rekaman dari tabel kiri
rightanti, rightantisemi Anti join kanan dan varian semi
Skema: Semua kolom dari tabel kanan
Baris: Semua rekaman dari tabel kanan yang tidak cocok dengan rekaman dari tabel kiri

Perhatikan bahwa jenis gabungan default adalah innerunique, dan tidak perlu ditentukan. Namun demikian, ini adalah praktik terbaik untuk selalu secara eksplisit menentukan jenis gabungan untuk kejelasan.

Saat Anda maju melalui modul ini, Anda juga mempelajari tentang arg_min() fungsi dan arg_max() agregasi, as operator sebagai alternatif untuk let pernyataan, dan startofmonth() fungsi untuk membantu mengelompokkan data menurut bulan.