Güncelleştirme ilkesine genel bakış
Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini
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.
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.
Güncelleştirme ilkesi, normal alımla aynı kısıtlamalara ve en iyi yöntemlere tabidir. İlke, Eventhouse 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.
- 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ırviewer
. 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ı
- İlkeyle ilgili sorgu depolanan işlevleri çağırabilir, ancak:
- Kümeler arası sorgular 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ğil.
- Akış alımında güncelleştirme ilkesi sınırlamaları için bkz . akış alımı sınırlamaları.
- İlkeyle ilgili sorgu depolanan işlevleri çağırabilir, ancak:
- Olaylar arası sorgular 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ğil.
- Varsayılan olarak, Eventhouse'daki tüm tablolar için Akış alma ilkesi etkinleştirilir. İşlevleri bir güncelleştirme ilkesinde
join
işleciyle kullanmak için akış alma ilkesinin devre dışı bırakılması gerekir. Devre dışı bırakmak için.alter
table
TableNamepolicy
streamingingestion
PolicyObject komutunu kullanın.
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
veyacluster("<ClusterName>").database("<DatabaseName>").TableName
kullanmayın.
- Tablonun tam adını kullanmayın. Bunun yerine kullanın
TableName
. -
database("<DatabaseName>").TableName
veyacluster("<EventhouseName>").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 :IsTransactional
değerini ayarlayın.
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:
-
.show table *TableName* policy update
bir tablonun geçerli güncelleştirme ilkesini gösterir. -
.alter table *TableName* policy update
bir tablonun geçerli güncelleştirme ilkesini tanımlar. -
.alter-merge table *TableName* policy update
, bir tablonun geçerli güncelleştirme ilkesine tanım ekler. -
.delete table *TableName* policy update
tablonun geçerli güncelleştirme ilkesini siler.
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:
- .ingest (çekme)
- .ingest (satır içi)
- .set | .append | .set-or-append | .set-or-replace
- .move kapsamları
-
.replace extents
-
PropagateIngestionProperties
Komut yalnızca alma işlemlerinde etkili olur. Güncelleştirme ilkesi bir.move extents
veya.replace extents
komutunun parçası olarak tetiklendiğinde, bu seçeneğin hiçbir etkisi olmaz.
-
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 0sec
geçici silme süresini 00:00:00
(veya ) 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 performansı etkileyebilir ve veri kapsamları için veri 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 false
olması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 komutu.show ingestion failures
ilke güncelleştirme hatalarını görüntüleyebilirsiniz: Başka bir durumda, alımı el ile yeniden deneyebilirsiniz.
.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.
Şimdi kaynak tabloyu oluşturalım:
.create table MySourceTable (OriginalRecord:string)
Ardından hedef tabloyu oluşturun:
.create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
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 }
Ş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}]'
Veriler hedef tabloya alındıktan sonra kaynak tabloyu boşaltmak için, kaynak tablodaki bekletme ilkesini 0'lara sahip olacak şekilde
SoftDeletePeriod
tanımlayın..alter-merge table MySourceTable policy retention softdelete = 0s