Aracılığıyla paylaş


Veritabanı imleçleri

Sürüm açılan listesini kullanarak hizmetler arasında geçiş yapın. Gezinti hakkında daha fazla bilgi edinin.
Şunlar için geçerlidir: ✅ Azure Veri Gezgini

veritabanı imleci, veritabanını birden çok kez sorgulamanızı sağlayan veritabanı düzeyinde bir nesnedir. Sorgularla paralel olarak gerçekleşen data-append veya data-retention işlemleri olsa bile tutarlı sonuçlar elde edersiniz.

Veritabanı imleçleri iki önemli senaryoya yönelik olarak tasarlanmıştır:

  • Sorgu "aynı veri kümesini" gösterdiği sürece aynı sorguyu birden çok kez yineleme ve aynı sonuçları alma özelliği.

  • "Tam olarak bir kez" sorgu yapma özelliği. Bu sorgu yalnızca önceki bir sorgunun görmediği verileri "görür", çünkü veriler o zaman kullanılabilir değildi. Sorgu, örneğin, aynı kaydı iki kez işleme veya yanlışlıkla kayıtları atlama korkusu olmadan bir tablodaki yeni gelen tüm verileri yinelemenize olanak tanır.

Veritabanı imleci sorgu dilinde stringtüründe bir skaler değer olarak temsil edilir. Gerçek değer opak olarak kabul edilmelidir ve değerini kaydetmek veya aşağıdaki imleç işlevlerini kullanmak dışında herhangi bir işlem için destek yoktur.

İmleç işlevleri

Kusto, yukarıdaki iki senaryonun uygulanmasına yardımcı olmak için üç işlev sağlar:

  • cursor_current(): Veritabanı imlecinin geçerli değerini almak için bu işlevi kullanın. Bu değeri diğer iki işlev için bağımsız değişken olarak kullanabilirsiniz.

  • cursor_after(rhs:string): Bu özel işlev, IngestionTime ilkesi etkinleştirilmiş tablo kayıtlarında kullanılabilir. Kaydın bool veritabanı imleç değerinin ingestion_time() veritabanı imleç değerinden sonra gelip geldiğini belirten rhs türünde bir skaler değer döndürür.

  • cursor_before_or_at(rhs:string): Bu özel işlev, IngestionTime ilkesi etkinleştirilen tablo kayıtlarında kullanılabilir. Kaydın bool veritabanı imleç değerinin ingestion_time() veritabanı imleç değerinden önce mi yoksa ingestion_time() mı geldiğini belirten türünde bir skaler değer döndürür.

İki özel işlevin (cursor_after ve cursor_before_or_at) yan etkisi de vardır: Kusto kullanıldığında, veritabanı imlecinin geçerli değerini sorgunun @ExtendedProperties sonuç kümesine yayar. İmlecin özellik adı Cursorve değeri tek bir string.

Mesela:

{"Cursor" : "636040929866477946"}

Kısıtlama -ları

Veritabanı imleçleri yalnızca IngestionTime ilkesi etkinleştirildiği tablolarla kullanılabilir. Böyle bir tablodaki her kayıt, kayıt alındığı sırada geçerli olan veritabanı imlecinin değeriyle ilişkilendirilir. Bu nedenle, ingestion_time() işlevi kullanılabilir.

Veritabanı imleç nesnesi, veritabanında IngestionTime ilkesi tanımlanmış en az bir tablo olmadığı sürece anlamlı bir değer tutmaz. Bu değerin, alım geçmişi tarafından gerekli olduğu şekilde bu tür tablolara güncelleştirilmesi ve bu tür tablolara başvuran sorguların çalıştırılması garanti edilir. Diğer durumlarda güncelleştirilebilir veya güncelleştirilmeyebilir.

Alma işlemi önce verileri işler, böylece sorgulanabilir ve her kayda yalnızca gerçek bir imleç değeri atar. Veritabanı imleci kullanılarak veri alımından hemen sonra sorgulanması, imleç değeri henüz atanmadığından eklenen son kayıtları birleştirmeyebilir. Ayrıca, yalnızca bir imleç işlemesi değerini güncelleştirebileceğinden, alma işlemi arasında yapılmış olsa bile geçerli veritabanı imleci değerinin tekrar tekrar alınması aynı değeri döndürebilir.

Veritabanı imleçlerini temel alan bir tablonun sorgulanması, kayıtların doğrudan bu tabloya alındığı durumlarda yalnızca "çalışması" (tam olarak bir kez garanti verilmesi) garanti edilir. Verileri tabloya taşımak için .move kapsamları veya .replace kapsam ları gibi uzantılar komutları kullanıyorsanız veya tablo.rename tablosu kullanıyorsanız, bu tabloyu veritabanı imleçlerini kullanarak sorgulamanın hiçbir verinin eksik olmaması garanti değildir. Bunun nedeni, kayıtların alım süresinin ilk kez alındığında atanması ve taşıma kapsamları işlemi sırasında değişmemesidir.

Kapsamlar hedef tabloya taşındığında, atanan imleç değeri zaten işlenmiş olabilir ve veritabanı imlecinin sonraki sorgusu yeni kayıtları kaçıracaktır.

Örnekler:

Aşağıdaki örneklerde kayıtların tam olarak bir kez nasıl işlendiği gösterilmektedir.

Employeesşemasına sahip bir tablo [Name, Salary] için, yeni kayıtları tabloya alınırken sürekli olarak işlemek için aşağıdaki işlemi kullanın:

// [Once] Enable the IngestionTime policy on table Employees
.set table Employees policy ingestiontime true

// [Once] Get all the data that the Employees table currently holds 
Employees | where cursor_after('')

// The query above will return the database cursor value in
// the @ExtendedProperties result set. Lets assume that it returns
// the value '636040929866477946'

// [Many] Get all the data that was added to the Employees table
// since the previous query was run using the previously-returned
// database cursor 
Employees | where cursor_after('636040929866477946') // -> 636040929866477950

Employees | where cursor_after('636040929866477950') // -> 636040929866479999

Employees | where cursor_after('636040929866479999') // -> 636040939866479000