Aracılığıyla paylaş


Güncelleştirme ilkesine genel bakış

Güncelleştirme ilkeleri, bir tabloya yeni veriler yazıldığında tetiklenen otomasyon mekanizmalarıdır. Alınan verileri dönüştürmek ve sonucu hedef tabloya kaydetmek için bir sorgu çalıştırarak özel düzenleme gereksinimini ortadan kaldırır. Tek bir tabloda birden çok güncelleştirme ilkesi tanımlanabilir ve bu sayede farklı dönüştürmeler yapılabilir ve aynı anda birden çok tabloya veri kaydedilir. Hedef tabloların kaynak tablodan farklı bir şeması, bekletme ilkesi ve diğer ilkeleri olabilir.

Örneğin, yüksek oranda izleme kaynak tablosu serbest metin sütunu olarak biçimlendirilmiş veriler içerebilir. Hedef tablo, ayrıştırma işleci kullanılarak kaynak tablonun serbest metin verilerinin dönüşümünden oluşturulan iyi yapılandırılmış bir şemayla belirli izleme çizgileri içerebilir. Daha fazla bilgi için yaygın senaryolar.

Aşağıdaki diyagramda güncelleştirme ilkesinin üst düzey görünümü gösterilmiştir. İkinci kaynak tabloya veri eklendiğinde tetiklenen iki güncelleştirme ilkesi gösterir. Bunlar tetiklendikten sonra, dönüştürülen veriler iki hedef tabloya eklenir.

Diyagramda güncelleştirme ilkesine genel bir bakış gösterilmektedir.

Güncelleştirme ilkesi, normal alımla aynı kısıtlamalara ve en iyi yöntemlere tabidir. İlkenin ölçeği küme boyutuna göre genişletilir ve toplu alımı işlerken daha verimli olur.

Not

  • Kaynak ve hedef tablo aynı veritabanında olmalıdır.
  • Güncelleştirme ilkesi işlev şeması ve hedef tablo şeması sütun adlarında, türlerinde ve sıralarında eşleşmelidir.
  • Güncelleştirme ilkesi işlevi diğer veritabanlarındaki tablolara başvurabilir. Bunu yapmak için güncelleştirme ilkesi bir ManagedIdentity özellik ile tanımlanmalıdır ve yönetilen kimliğin başvuruda bulunılan veritabanlarında rolü olmalıdır viewer .

Biçimlendirilmiş verilerin alımı performansı artırır ve iyi tanımlanmış bir biçim olduğundan CSV tercih edilir. Ancak bazen verilerin biçimi üzerinde denetiminiz olmaz veya alınan verileri zenginleştirmek isteyebilirsiniz. Örneğin, kayıtları veritabanınızda statik bir boyut tablosuyla birleştirebilirsiniz.

İlke sorgusunu güncelleştirme

Güncelleştirme ilkesi hedef tabloda tanımlanmışsa, kaynak tabloya alınan verilerde birden çok sorgu çalıştırılabilir. Birden çok güncelleştirme ilkesi varsa, yürütme sırasının bilinmesi şart değildir.

Sorgu sınırlamaları

Uyarı

Yanlış bir sorgu, kaynak tabloya veri alımını engelleyebilir. Sınırlamaların yanı sıra sorgu sonuçlarıyla kaynak ve hedef tabloların şeması arasındaki uyumluluğun, yanlış bir sorgunun kaynak tabloya veri alımını engellemesine neden olabileceğini unutmayın.

Bu sınırlamalar ilkenin oluşturulması ve yürütülmesi sırasında doğrulanır, ancak sorgunun başvurabileceği rastgele depolanmış işlevler güncelleştirildiğinde doğrulanmaz. Bu nedenle, güncelleştirme ilkesinin değişmediğinden emin olmak için dikkatli bir şekilde değişiklik yapmak çok önemlidir.

İlkenin Source bir bölümünde veya bölümü tarafından başvuruda bulunan işlevlerde tabloya Query Query başvururken:

  • Tablonun tam adını kullanmayın. Bunun yerine kullanın TableName.
  • database("DatabaseName").TableName veya cluster("ClusterName").database("DatabaseName").TableName kullanmayın.

güncelleştirme ilkesi nesnesi

Bir tabloda kendisiyle ilişkilendirilmiş sıfır veya daha fazla güncelleştirme ilkesi nesnesi olabilir. Bu tür her nesne, aşağıdaki özelliklerin tanımlandığı bir JSON özellik paketi olarak temsil edilir.

Özellik Türü Açıklama
IsEnabled bool Güncelleştirme ilkesinin true - etkin veya yanlış - devre dışı olup olmadığını belirtir
Kaynak string Güncelleştirme ilkesinin çağrılması tetikleyen tablonun adı
Sorgu string Güncelleştirme için veri üretmek için kullanılan sorgu
IsTransactional bool Güncelleştirme ilkesinin işlemsel olup olmadığını, varsayılan değerin false olduğunu belirtir. İlke işlem amaçlıysa ve güncelleştirme ilkesi başarısız olursa, kaynak tablo güncelleştirilmez.
YaymaEnestionProperties bool Kaynak tabloya alma sırasında belirtilen kapsam etiketleri ve oluşturma zamanı gibi özelliklerin hedef tabloya uygulanıp uygulanmadığını belirtir.
ManagedIdentity string Güncelleştirme ilkesinin çalıştığı yönetilen kimlik. Yönetilen kimlik bir nesne kimliği veya system ayrılmış sözcük olabilir. Sorgu diğer veritabanlarındaki tablolara veya etkinleştirilmiş bir satır düzeyi güvenlik ilkesine sahip tablolara başvurduğunda güncelleştirme ilkesi yönetilen kimlikle yapılandırılmalıdır. Daha fazla bilgi için bkz . Güncelleştirme ilkesini çalıştırmak için yönetilen kimlik kullanma.

Not

Üretim sistemlerinde hedef tablonun geçici hatalarda veri kaybetmediğinden emin olmak için :true değerini ayarlayınIsTransactional.

Not

A tablosundan B tablosuna ve C tablosuna geçişli güncelleştirmelere izin verilir. Ancak, güncelleştirme ilkeleri döngüsel bir şekilde tanımlanırsa, bu çalışma zamanında algılanır ve güncelleştirme zinciri kesilir. Veriler zincirdeki her tabloya yalnızca bir kez alınır.

Yönetim komutları

güncelleştirme ilkesi yönetim komutları şunlardır:

Güncelleştirme ilkesi alımdan sonra başlatılır

Güncelleştirme ilkeleri, veriler alınıp bir kaynak tabloya taşındığında veya kaynak tabloda kapsamlar oluşturulduğunda geçerlilik kazanır. Bu eylemler aşağıdaki komutlardan herhangi biri kullanılarak yapılabilir:

Uyarı

Güncelleştirme ilkesi bir .set-or-replace komutun parçası olarak çağrıldığında, türetilmiş tablolardaki veriler varsayılan olarak kaynak tablodakiyle aynı şekilde değiştirilir. Komut çağrılırsa replace güncelleştirme ilkesi ilişkisi olan tüm tablolarda veriler kaybolabilir. Bunun yerine kullanmayı .set-or-append göz önünde bulundurun.

Kaynak tablodan veri kaldırma

Verileri hedef tabloya aldıktan sonra, isteğe bağlı olarak kaynak tablodan kaldırabilirsiniz. Kaynak tablonun bekletme ilkesinde geçici silme süresini 0sec (veya 00:00:00) ve güncelleştirme ilkesini işlemsel olarak ayarlayın. Aşağıdaki koşullar geçerlidir:

  • Kaynak veriler kaynak tablodan sorgulanamaz
  • Kaynak veriler, alma işleminin bir parçası olarak dayanıklı depolamada kalıcı değildir
  • operasyonel performans artar. Alma sonrası kaynakları, kaynak tablodaki uzantılarda arka plan temizleme işlemleri için azaltılır.

Not

Kaynak tabloda geçici silme süresi 0sec (veya 00:00:00) olduğunda, bu tabloya başvuran herhangi bir güncelleştirme ilkesi işlemsel olmalıdır.

Performans etkisi

Güncelleştirme ilkeleri küme performansını etkileyebilir ve veri uzantılarının alımı hedef tablo sayısıyla çarpılır. İlkeyle ilgili sorguyu iyileştirmek önemlidir. İlkeyi oluşturmadan veya değiştirmeden önce veya sorguyla birlikte kullanılan işlevde ilkeyi çağırarak güncelleştirme ilkesinin performans etkisini test edebilirsiniz.

Kaynak kullanımını değerlendirme

Kaynak kullanımını (CPU, bellek vb.) aşağıdaki parametrelerle değerlendirmek için kullanın .show queries:

  • Source Kaynak tablo adını olan özelliğini olarak ayarlayınMySourceTable
  • Query adlı bir işlevi çağırmak için özelliğini ayarlayınMyFunction()
// '_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

İşlem ayarları

Güncelleştirme ilkesi IsTransactional ayarı, güncelleştirme ilkesinin işlemsel olup olmadığını tanımlar ve ilke güncelleştirmesinin davranışını aşağıdaki gibi etkileyebilir:

  • IsTransactional:false: Değer varsayılan false değerine ayarlanırsa, güncelleştirme ilkesi kaynak ve hedef tablodaki veriler arasında tutarlılık garantisi vermez. Güncelleştirme ilkesi başarısız olursa veriler hedef tabloya değil yalnızca kaynak tabloya alınır. Bu senaryoda alma işlemi başarılıdır.

  • IsTransactional:true: Değer true olarak ayarlanırsa, ayar kaynak ve hedef tablolardaki veriler arasında tutarlılığı garanti eder. Güncelleştirme ilkesi başarısız olursa, veriler kaynak veya hedef tabloya alınamaz. Bu senaryoda alma işlemi başarısız oldu.

Hataları işleme

İlke güncelleştirmeleri başarısız olduğunda, ayarın IsTransactional true veya falseolmasına bağlı olarak farklı şekilde işlenir. Güncelleştirme ilkesi hatalarının yaygın nedenleri şunlardır:

  • Sorgu çıktı şeması ile hedef tablo arasında uyuşmazlık.
  • Herhangi bir sorgu hatası.

aşağıdaki komutla komutunu kullanarak .show ingestion failures ilke güncelleştirme hatalarını görüntüleyebilirsiniz:

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

Ayıklama, dönüştürme, yükleme örneği

Ayıklama, dönüştürme, yükleme (ETL) gerçekleştirmek için güncelleştirme ilkesi ayarlarını kullanabilirsiniz.

Bu örnekte, ETL gerçekleştirmek için basit bir işlevle bir güncelleştirme ilkesi kullanın. İlk olarak iki tablo oluşturacağız:

  • Kaynak tablo - Verilerin alındığı dize türünde tek bir sütun içerir.
  • Hedef tablo - İstenen şemayı içerir. Güncelleştirme ilkesi bu tabloda tanımlanmıştır.
  1. Şimdi kaynak tabloyu oluşturalım:

    .create table MySourceTable (OriginalRecord:string)
    
  2. Ardından hedef tabloyu oluşturun:

    .create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
    
  3. Ardından verileri ayıklamak için bir işlev oluşturun:

    .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. Şimdi, oluşturduğumuz işlevi çağırmak için güncelleştirme ilkesini ayarlayın:

    .alter table MyTargetTable policy update
    @'[{ "IsEnabled": true, "Source": "MySourceTable", "Query": "ExtractMyLogs()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
    
  5. Veriler hedef tabloya alındıktan sonra kaynak tabloyu boşaltmak için, kaynak tablodaki bekletme ilkesini 0'lara sahip olacak şekilde SoftDeletePeriodtanımlayın.

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