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, böylece farklı dönüştürmeler yapılabilir ve veriler aynı anda birden çok tabloya 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 şema ile belirli izleme satırlarını 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. veriler ikinci kaynak tabloya eklendiğinde tetiklenen ve dönüştürülmüş verilerin iki hedef tabloya eklenmesiyle sonuçlanan iki güncelleştirme ilkesi gösterir.

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 verimlidir.

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.

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 denetim sahibi olmazsınız 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, bir kaynak tabloya alınan veriler üzerinde birden çok sorgu çalıştırılabilir. Birden çok güncelleştirme ilkesi varsa, yürütme sırasının bilinmesi gerekmez.

Sorgu sınırlamaları

  • İlkeyle ilgili sorgu depolanan işlevleri çağırabilir, ancak:
    • Kümeler arası sorgu gerçekleştiremez.
    • Dış verilere veya dış tablolara erişemez.
    • Açıklama balonu yapamaz (eklenti kullanarak).
  • Sorgu, RestrictedViewAccess ilkesinin etkinleştirildiği tablolara okuma erişimine sahip değildir.
  • Akış alımında güncelleştirme ilkesi sınırlamaları için bkz. akış alımı 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, kaynak tabloya veri alımını önlemek için yanlış sorguya 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 tüm değişiklikleri dikkatli bir şekilde yapmak çok önemlidir.

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

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

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 Description
IsEnabled bool Güncelleştirme ilkesinin true - etkin veya yanlış - devre dışı olup olmadığını belirtir
Source 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ı belirtir; varsayılan değer false'tur. İlke işlemselse ve güncelleştirme ilkesi başarısız olursa, kaynak tablo güncelleştirilmez.
YaymaIngestionProperties 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ığı adına 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ş 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 kaybetmemesini sağlamak 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, çalışma zamanında bu algılanır ve güncelleştirme zinciri kesilir. Veriler zincirdeki her tabloya yalnızca bir kez eklenir.

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 uzantılar aşağıdaki komutlardan herhangi biri kullanılarak bir kaynak tabloda oluşturulduğunda geçerlilik kazanır:

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 dönemi 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
  • İşletimsel performans artar. Alma sonrası kaynakları, kaynak tablodaki kapsamlarda 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 kapsamları için veri alımı hedef tablo sayısıyla çarpılır. İlkeyle ilgili sorguyu iyileştirmek önemlidir. İlkeyi zaten var olan kapsamlarda, ilkeyi oluşturmadan veya değiştirmeden önce veya sorguyla kullanılan işlev üzerinde ç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

Hatalar

varsayılan ayarıyla IsTransactional:false, ilke çalışmasa bile veriler kaynak tabloya yine de alınabiliyor.

Ayarı IsTransactional:true , kaynak ve hedef tablodaki veriler arasında tutarlılığı garanti eder. Ancak, ilke koşulları başarısız olursa veriler kaynak tabloya alınamaz. Alternatif olarak, koşullara bağlı olarak bazen veriler kaynak tabloya alınsa da hedef tabloya alınmaz. Ancak, ilkeniz yanlış tanımlanmışsa veya şema uyuşmazlığı varsa, veriler kaynak veya hedef tabloya alınmıyordur. Örneğin, sorgu çıktı şeması ile hedef tablo arasındaki uyuşmazlık, hedef tablodan bir sütunun bırakılmasından kaynaklanabilir.

komutunu kullanarak .show ingestion failureshataları görüntüleyebilirsiniz.

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

Hataların tedavisi

İşlem dışı ilke

olarak ayarlandığında IsTransactional:false, ilkenin çalıştırılamaması yoksayılır. Alma işlemi otomatik olarak yeniden denenmiyor. Alımı el ile yeniden deneyebilirsiniz.

İşlem ilkesi

olarak IsTransactional:trueayarlandığında, alma yöntemi isepull, Veri Yönetimi hizmeti söz konusudur ve alma işlemi aşağıdaki koşullara göre otomatik olarak yeniden denenebilir:

  • Aşağıdaki yapılandırılabilir sınır ayarlarından biri karşılanıncaya kadar yeniden denemeler gerçekleştirilir: DataImporterMaximumRetryPeriod veya DataImporterMaximumRetryAttempts
  • Varsayılan olarak DataImporterMaximumRetryPeriod ayar iki gündür ve DataImporterMaximumRetryAttempts10 gündür
  • Geri alma süresi 2 dakikada başlar ve ikiye katlar. Bu nedenle bekleme 2 dakika ile başlar, ardından 4 dk'ya, 8 dk'ya, 16 dk'ya kadar vb. artar.

Başka bir durumda, alımı el ile yeniden deneyebilirsiniz.

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 olarak SoftDeletePeriodtanımlayın.

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