Bagikan melalui


Kasus penggunaan tampilan materialisasi

Tampilan materialisasi mengekspos kueri agregasi melalui tabel sumber atau tampilan materialisasi lainnya. Artikel ini membahas kasus penggunaan umum dan tingkat lanjut untuk tampilan materialisasi.

Kasus penggunaan umum

Berikut ini adalah skenario umum yang dapat diatasi dengan menggunakan tampilan materialisasi:

  • Perbarui data: Perbarui data dengan mengembalikan rekaman terakhir per entitas menggunakan arg_max() (fungsi agregasi). Misalnya, buat tampilan yang hanya mewujudkan rekaman yang diserap mulai sekarang:

    .create materialized-view ArgMax on table T
    {
        T | summarize arg_max(Timestamp, *) by User
    }
    
  • Mengurangi resolusi data Kurangi resolusi data dengan menghitung statistik berkala atas data mentah. Gunakan berbagai fungsi agregasi berdasarkan periode waktu. Misalnya, pertahankan rekam jepret terbaru pengguna yang berbeda per hari:

    .create materialized-view UsersByDay on table T
    {
        T | summarize dcount(User) by bin(Timestamp, 1d)
    }
    
  • Catatan deduplikasi: Deduplikasi rekaman dalam tabel menggunakan take_any() (fungsi agregasi). Misalnya, buat tampilan materialisasi yang mendeduplikasi tabel sumber berdasarkan EventId kolom, menggunakan lookback 6 jam. Rekaman dideduplikasi hanya terhadap rekaman yang diserap 6 jam sebelum rekaman saat ini.

    .create materialized-view with(lookback=6h) DeduplicatedTable on table T
    {
        T
        | summarize take_any(*) by EventId
    }
    

    Catatan

    Anda dapat menyembunyikan tabel sumber dengan membuat fungsi dengan nama yang sama dengan tabel yang mereferensikan tampilan materialisasi sebagai gantinya. Pola ini memastikan bahwa penelepon yang mengkueri tabel mengakses tampilan materialisasi deduplikasi karena fungsi mengambil alih tabel dengan nama yang sama. Untuk menghindari referensi siklik dalam definisi tampilan, gunakan fungsi table() untuk mereferensikan tabel sumber:

    .create materialized-view DeduplicatedTable on table T
    {
        table('T')
        | summarize take_any(*) by EventId
    } 
    

Untuk contoh selengkapnya, lihat perintah .create materialized-view.

Skenario tingkat lanjut

Anda dapat menggunakan tampilan materialisasi untuk membuat/memperbarui/menghapus pemrosesan peristiwa. Saat menangani rekaman dengan informasi yang tidak lengkap atau usang untuk setiap kolom, tampilan materialisasi dapat memberikan pembaruan terbaru untuk setiap kolom, tidak termasuk entitas yang telah dihapus.

Pertimbangkan tabel input berikut bernama Events:

Input

Tanda waktu Cud ID col1 col2 col3
2023-10-24 00:00:00.0000000 C 1 1 2
2023-10-24 01:00:00.0000000 U 1 22 33
2023-10-24 02:00:00.0000000 U 1 23
2023-10-24 00:00:00.0000000 C 2 1 2
2023-10-24 00:10:00.0000000 U 2 4
2023-10-24 02:00:00.0000000 D 2

Buat tampilan materialisasi untuk mendapatkan pembaruan terbaru per kolom, menggunakan fungsi agregasi arg_max():

.create materialized-view ItemHistory on table Events
{
    Events
    | extend Timestamp_col1 = iff(isnull(col1), datetime(1970-01-01), Timestamp),
                Timestamp_col2 = iff(isnull(col2), datetime(1970-01-01), Timestamp),
                Timestamp_col3 = iff(isnull(col3), datetime(1970-01-01), Timestamp)
    | summarize arg_max(Timestamp_col1, col1), arg_max(Timestamp_col2, col2), arg_max(Timestamp_col3, col3), arg_max(Timestamp, cud) by id
}

Output

ID Timestamp_col1 col1 Timestamp_col2 col2 Timestamp_col3 col3 Tanda waktu Cud
2 2023-10-24 00:00:00.0000000 1 2023-10-24 00:10:00.0000000 4 1970-01-01 00:00:00.0000000 2023-10-24 02:00:00.0000000 D
1 2023-10-24 00:00:00.0000000 1 2023-10-24 02:00:00.0000000 23 2023-10-24 01:00:00.0000000 33 2023-10-24 02:00:00.0000000 U

Anda dapat membuat fungsi tersimpan untuk membersihkan hasilnya lebih lanjut:

ItemHistory
| project Timestamp, cud, id, col1, col2, col3
| where cud != "D"
| project-away cud

Output Akhir

Pembaruan terbaru untuk setiap kolom untuk ID 1, karena ID 2 dihapus.

Tanda waktu ID col1 col2 col3
2023-10-24 02:00:00.0000000 1 1 23 33

Tampilan materialisasi vs. kebijakan pembaruan

Tampilan materialisasi dan kebijakan pembaruan bekerja secara berbeda dan melayani kasus penggunaan yang berbeda. Gunakan panduan berikut untuk mengidentifikasi mana yang harus Anda gunakan:

  • Tampilan materialisasi cocok untuk agregasi, sementara kebijakan pembaruan tidak. Kebijakan pembaruan berjalan secara terpisah untuk setiap batch penyerapan, dan oleh karena itu hanya dapat melakukan agregasi dalam batch penyerapan yang sama. Jika Anda memerlukan kueri agregasi, selalu gunakan tampilan materialisasi.

  • Kebijakan pembaruan berguna untuk transformasi data, pengayaan dengan tabel dimensi (biasanya menggunakan operator pencarian) dan manipulasi data lainnya yang dapat berjalan dalam cakupan penyerapan tunggal.

  • Kebijakan pembaruan berjalan selama waktu penyerapan. Data tidak tersedia untuk kueri dalam tabel sumber atau tabel target hingga semua kebijakan pembaruan berjalan. Tampilan materialisasi, di sisi lain, bukan bagian dari alur penyerapan. Proses materialisasi berjalan secara berkala di latar belakang, pasca penyerapan. Rekaman dalam tabel sumber tersedia untuk kueri sebelum diwujudkan.

  • Kebijakan pembaruan dan tampilan materialisasi dapat menggabungkan gabungan, tetapi efektivitasnya terbatas pada skenario tertentu. Secara khusus, gabungan hanya cocok ketika data yang diperlukan untuk gabungan dari kedua sisi dapat diakses pada saat kebijakan pembaruan atau proses materialisasi. Jika entitas yang cocok diserap saat kebijakan pembaruan atau materialisasi berjalan, ada risiko mengabaikan data. Lihat selengkapnya tentang dimension tables dalam parameter kueri tampilan materialisasi dan pada tabel fakta dan dimensi.

Catatan

Jika Anda perlu mewujudkan gabungan, yang tidak cocok untuk kebijakan pembaruan dan tampilan materialisasi, Anda dapat mengatur proses Anda sendiri untuk melakukannya, menggunakan alat orkestrasi dan menyerap dari perintah kueri.