Bagikan melalui


Ringkasan kebijakan pembaruan

Kebijakan pembaruan adalah mekanisme otomatisasi yang dipicu saat data baru ditulis ke tabel. Mereka menghilangkan kebutuhan akan orkestrasi khusus dengan menjalankan kueri untuk mengubah data yang diserap dan menyimpan hasilnya ke tabel tujuan. Beberapa kebijakan pembaruan dapat ditentukan pada satu tabel, memungkinkan transformasi yang berbeda dan menyimpan data ke beberapa tabel secara bersamaan. Tabel target dapat memiliki skema, kebijakan penyimpanan, dan kebijakan lain yang berbeda dari tabel sumber.

Misalnya, tabel sumber jejak tingkat tinggi dapat berisi data yang diformat sebagai kolom teks bebas. Tabel target dapat menyertakan garis jejak tertentu, dengan skema terstruktur baik yang dihasilkan dari transformasi data teks bebas tabel sumber menggunakan operator urai. Untuk informasi selengkapnya, skenario umum.

Diagram berikut menggambarkan tampilan tingkat tinggi dari kebijakan pembaruan. Ini menunjukkan dua kebijakan pembaruan yang dipicu saat data ditambahkan ke tabel sumber kedua. Setelah dipicu, data yang diubah ditambahkan ke dua tabel target.

Diagram memperlihatkan gambaran umum kebijakan pembaruan.

Kebijakan pembaruan tunduk pada batasan dan praktik terbaik yang sama dengan penyerapan reguler. Kebijakan tersebut menyesuaikan dengan ukuran kluster, dan lebih efisien saat menangani penyerapan massal.

Catatan

  • Tabel sumber dan target harus berada dalam database yang sama.
  • Skema fungsi kebijakan pembaruan dan skema tabel target harus cocok dengan nama, jenis, dan urutan kolomnya.
  • Fungsi kebijakan pembaruan dapat mereferensikan tabel di database lain. Untuk melakukan ini, kebijakan pembaruan harus ditentukan dengan ManagedIdentity properti, dan identitas terkelola harus memiliki viewer peran pada database yang dirujuk.

Menyerap data yang diformat meningkatkan performa, dan CSV lebih dipilih karena formatnya yang terdefinisi dengan baik. Namun, terkadang, Anda tidak memiliki kontrol atas format data, atau Anda ingin memperkaya data yang diserap, misalnya, dengan menggabungkan rekaman dengan tabel dimensi statis dalam database Anda.

Kueri kebijakan pembaruan

Jika kebijakan pembaruan ditentukan pada tabel target, beberapa kueri dapat berjalan pada data yang diserap ke dalam tabel sumber. Jika ada beberapa kebijakan pembaruan, urutan eksekusi belum tentu diketahui.

Batasan kueri

  • Kueri terkait kebijakan dapat memanggil fungsi tersimpan, tetapi:
    • Ini tidak dapat melakukan kueri lintas kluster.
    • Ini tidak dapat mengakses data eksternal atau tabel eksternal.
    • Ini tidak dapat membuat panggilan (dengan menggunakan plugin).
  • Kueri tidak memiliki akses baca ke tabel yang mengaktifkan kebijakan RestrictedViewAccess.
  • Untuk memperbarui batasan kebijakan dalam penyerapan streaming, lihat batasan penyerapan streaming.

Peringatan

Kueri yang salah dapat mencegah penyerapan data ke dalam tabel sumber. Penting untuk dicatat bahwa batasan, serta kompatibilitas antara hasil kueri dan skema tabel sumber dan tujuan, dapat menyebabkan kueri yang salah untuk mencegah penyerapan data ke dalam tabel sumber.

Batasan ini divalidasi selama pembuatan dan eksekusi kebijakan, tetapi tidak ketika fungsi tersimpan arbitrer yang mungkin diperbarui oleh kueri. Oleh karena itu, sangat penting untuk membuat perubahan apa pun dengan hati-hati untuk memastikan kebijakan pembaruan tetap utuh.

Saat merujuk tabel Source di bagian Query kebijakan, atau dalam fungsi yang dirujuk oleh bagianQuery:

  • Jangan gunakan nama tabel yang memenuhi syarat. Sebagai gantinya, gunakan TableName.
  • Jangan gunakan database("DatabaseName").TableName atau cluster("ClusterName").database("DatabaseName").TableName.

Objek kebijakan pembaruan

Tabel dapat memiliki nol atau lebih objek kebijakan pembaruan yang terkait dengannya. Setiap objek tersebut direpresentasikan sebagai kantong properti JSON, dengan properti berikut ditentukan.

Properti Tipe Deskripsi
IsEnabled bool Menyatakan jika kebijakan pembaruan true - diaktifkan, atau false - dinonaktifkan
Sumber string Nama tabel yang memicu pemanggilan kebijakan pembaruan
Kueri string Kueri yang digunakan untuk menghasilkan data untuk pembaruan
IsTransactional bool Menyatakan jika kebijakan pembaruan bersifat transaksi atau tidak, defaultnya adalah false. Jika kebijakan bersifat transaksi dan kebijakan pembaruan gagal, tabel sumber tidak diperbarui.
PropagateIngestionProperties bool Menyatakan jika properti yang ditentukan selama penyerapan ke tabel sumber, seperti tag tingkat dan waktu pembuatan, berlaku untuk tabel target.
IdentitasTerkelola string Identitas terkelola atas nama yang dijalankan kebijakan pembaruan. Identitas terkelola dapat berupa ID objek, atau kata yang dipesan system . Kebijakan pembaruan harus dikonfigurasi dengan identitas terkelola saat kueri mereferensikan tabel di database atau tabel lain dengan kebijakan keamanan tingkat baris yang diaktifkan. Untuk informasi selengkapnya, lihat Menggunakan identitas terkelola untuk menjalankan kebijakan pembaruan.

Catatan

Dalam sistem produksi, atur IsTransactional:true untuk memastikan bahwa tabel target tidak kehilangan data dalam kegagalan sementara.

Catatan

Pembaruan kaskade diperbolehkan, misalnya dari tabel A, ke tabel B, ke tabel C. Namun, jika kebijakan pembaruan ditentukan secara melingkar, maka akan terdeteksi saat runtime, dan rantai pembaruan terputus. Data diserap hanya sekali ke setiap tabel dalam rantai.

Perintah manajemen

Perintah manajemen kebijakan pembaruan meliputi:

Kebijakan pembaruan dimulai setelah penyerapan

Kebijakan pembaruan berlaku saat data diserap atau dipindahkan ke tabel sumber, atau tingkatan dibuat dalam tabel sumber. Tindakan ini dapat dilakukan menggunakan salah satu perintah berikut:

Peringatan

Saat kebijakan pembaruan dipanggil sebagai bagian dari perintah .set-or-replace, secara default data dalam tabel turunan diganti dengan cara yang sama seperti pada tabel sumber. Data mungkin hilang di semua tabel dengan hubungan kebijakan pembaruan jika perintah replace dipanggil. Pertimbangkan untuk menggunakan .set-or-append sebagai gantinya.

Menghapus data dari tabel sumber

Setelah menyerap data ke tabel target, Anda dapat secara opsional menghapusnya dari tabel sumber. Atur periode penghapusan sementara 0sec (atau 00:00:00) dalam kebijakan penyimpanan tabel sumber, dan kebijakan pembaruan sebagai transaksional. Ketentuan berikut berlaku:

  • Data sumber tidak dapat dikueri dari tabel sumber
  • Data sumber tidak bertahan dalam penyimpanan tahan lama sebagai bagian dari operasi penyerapan
  • Performa operasional membaik. Sumber daya pasca penyerapan dikurangi untuk operasi grooming latar belakang pada jangkauan di tabel sumber.

Catatan

Ketika tabel sumber memiliki periode 0sec penghapusan sementara (atau 00:00:00), kebijakan pembaruan apa pun yang mereferensikan tabel ini harus transaksi.

Dampak performa

Kebijakan pembaruan dapat memengaruhi performa kluster, dan penyerapan untuk jangkauan data dikalikan dengan jumlah tabel target. Penting untuk mengoptimalkan kueri terkait kebijakan. Anda dapat menguji dampak performa kebijakan pembaruan dengan memanggil kebijakan pada jangkauan yang sudah ada, sebelum membuat atau mengubah kebijakan, atau pada fungsi yang digunakan dengan kueri.

Mengevaluasi penggunaan sumber daya

Gunakan .show queries, untuk mengevaluasi penggunaan sumber daya (CPU, memori, dan sebagainya) dengan parameter berikut:

  • Atur properti Source, nama tabel sumber, sebagai MySourceTable
  • Atur properti Query untuk memanggil fungsi bernama MyFunction()
// '_extentId' is the ID of a recently created extent, that likely hasn't been merged yet.
let _extentId = toscalar(
    MySourceTable
    | project ExtentId = extent_id(), IngestionTime = ingestion_time()
    | where IngestionTime > ago(10m)
    | top 1 by IngestionTime desc
    | project ExtentId
);
// This scopes the source table to the single recent extent.
let MySourceTable =
    MySourceTable
    | where ingestion_time() > ago(10m) and extent_id() == _extentId;
// This invokes the function in the update policy (that internally references `MySourceTable`).
MyFunction

Pengaturan transaksi

Pengaturan kebijakan IsTransactional pembaruan menentukan apakah kebijakan pembaruan bersifat transaksi dan dapat memengaruhi perilaku pembaruan kebijakan, sebagai berikut:

  • IsTransactional:false: Jika nilai diatur ke nilai default, false, kebijakan pembaruan tidak menjamin konsistensi antara data dalam tabel sumber dan target. Jika kebijakan pembaruan gagal, data hanya diserap ke tabel sumber dan bukan ke tabel target. Dalam skenario ini, operasi penyerapan berhasil.

  • IsTransactional:true: Jika nilai diatur ke true, pengaturan menjamin konsistensi antara data dalam tabel sumber dan target. Jika kebijakan pembaruan gagal, data tidak diserap ke tabel sumber atau target. Dalam skenario ini, operasi penyerapan tidak berhasil.

Menangani kegagalan

Ketika pembaruan kebijakan gagal, pembaruan tersebut ditangani secara berbeda berdasarkan apakah IsTransactional pengaturannya adalah true atau false. Alasan umum kegagalan kebijakan pembaruan adalah:

  • Ketidakcocokan antara skema output kueri dan tabel target.
  • Kesalahan kueri apa pun.

Anda dapat melihat kegagalan pembaruan kebijakan menggunakan .show ingestion failures perintah dengan perintah berikut:

.show ingestion failures
| where FailedOn > ago(1hr) and OriginatesFromUpdatePolicy == true

Contoh ekstraksi, transformasi, pemuatan

Anda dapat menggunakan pengaturan kebijakan pembaruan untuk menjalankan ekstraksi, transformasi, pemuatan (ETL).

Dalam contoh ini, gunakan kebijakan pembaruan dengan fungsi sederhana untuk melakukan ETL. Pertama, kami buat dua tabel:

  • Tabel sumber - Berisi satu kolom berjenis string tempat data diserap.
  • Tabel target - Berisi skema yang diinginkan. Kebijakan pembaruan ditentukan pada tabel ini.
  1. Mari kita buat tabel sumber:

    .create table MySourceTable (OriginalRecord:string)
    
  2. Selanjutnya, buat tabel target:

    .create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
    
  3. Kemudian buat fungsi untuk mengekstrak data:

    .create function
     with (docstring = 'Parses raw records into strongly-typed columns', folder = 'UpdatePolicyFunctions')
         ExtractMyLogs()
        {
        MySourceTable
        | parse OriginalRecord with "[" Timestamp:datetime "] [ThreadId:" ThreadId:int "] [ProcessId:" ProcessId:int "] TimeSinceStartup: " TimeSinceStartup:timespan " Message: " Message:string
        | project-away OriginalRecord
    }
    
  4. Sekarang, atur kebijakan pembaruan untuk memanggil fungsi yang kita buat:

    .alter table MyTargetTable policy update
    @'[{ "IsEnabled": true, "Source": "MySourceTable", "Query": "ExtractMyLogs()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
    
  5. Untuk mengosongkan tabel sumber setelah data diserap ke dalam tabel target, tentukan kebijakan penyimpanan pada tabel sumber untuk memiliki 0 sebagai SoftDeletePeriod.

     .alter-merge table MySourceTable policy retention softdelete = 0s