Partitioning ilkesi
Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini
Bölümleme ilkesi, belirli bir tablo veya gerçekleştirilmiş görünüm için kapsamların (veri parçaları) bölümlenip bölümlenmediğini ve nasıl bölümlenmesi gerektiğini tanımlar.
İlke, veri alımından sonra kapsamlar oluşturulduktan sonra gerçekleşen ek bir arka plan işlemini tetikler. Bu işlem, verileri kaynak kapsamlardan yeniden boyutlandırmayı ve bölüm anahtarı olarak belirlenen sütunun tüm değerlerinin tek bir bölümde bulunduğu homojen kapsamlar oluşturmayı içerir.
Bölümleme ilkesinin birincil amacı, desteklenen belirli senaryolarda sorgu performansını geliştirmektir.
Not
Varsayılan olarak, bir veri bölümleme ilkesi tanımlanmadığında (is null
), kapsamlar oluşturma (alma) zamanına göre bölümlenir. Çoğu durumda veri bölümleme ilkesi ayarlamanıza gerek yoktur.
Desteklenen senaryolar
Aşağıda, veri bölümleme ilkesini ayarlamanın önerildiği tek senaryolar yer alır. Diğer tüm senaryolarda ilkenin ayarlanması önerilmiyor.
- Orta veya yüksek kardinalite
string
guid
veya sütunda sık sık filtreler:- Örneğin: çok kiracılı çözümler veya sorguların çoğunun veya tümünün veya türündeki
string
guid
bir sütuna filtre uyguladığı veya veya gibiTenantId
MetricId
bir ölçüm tablosu. - Orta kardinalite en az 10.000 ayrı değerdir.
- Karma bölüm anahtarını veya
guid
sütunu olarakstring
ayarlayın ve özelliğini olarakuniform
ayarlayınPartitionAssignmentMode
.
- Örneğin: çok kiracılı çözümler veya sorguların çoğunun veya tümünün veya türündeki
- Yüksek kardinalite
string
veya sütunda sık sık toplamalar veyaguid
birleştirmeler:- Örneğin, birçok farklı algılayıcıdan alınan IoT bilgileri veya birçok farklı öğrencinin akademik kayıtları.
- Yüksek kardinalite, sütundaki değerlerin dağılımının yaklaşık eşit olduğu en az 1.000.000 ayrı değerdir.
- Bu durumda, karma bölüm anahtarını sık sık gruplandırılmış veya birleştirilmiş sütun olarak ayarlayın ve özelliğini olarak
ByPartition
ayarlayınPartitionAssignmentMode
.
- Sıra dışı veri alımı:
- Tabloya alınan veriler, veri oluşturma süresini temsil eden ve verileri filtrelemek için yaygın olarak kullanılan belirli
datetime
bir sütuna göre sıralanmayabilir ve kapsamlara (parçalar) bölünemeyebilir. Bunun nedeni, büyük bir zaman aralığı boyunca tarih saat değerleri içeren heterojen kaynak dosyalarından gelen bir geri doldurma olabilir. - Bu durumda, tekdüzen aralık tarih saat bölüm anahtarını sütun olarak
datetime
ayarlayın. - Alma zamanıyla hizalamak yerine sütundaki tarih saat değerleriyle uyumlu hale getirmek için bekletme ve önbelleğe alma ilkelerine ihtiyacınız varsa özelliğini olarak
true
ayarlayınOverrideCreationTime
.
- Tabloya alınan veriler, veri oluşturma süresini temsil eden ve verileri filtrelemek için yaygın olarak kullanılan belirli
Dikkat
- Bölümleme ilkesinin tanımlandığı tablo sayısında sabit kodlanmış sınır ayarlanmamıştır. Ancak, her ek tablo arka plan veri bölümleme işlemine ek yük ekler. Daha fazla tabloya ilke ayarlamak daha fazla kaynak kullanılmasına ve temel alınan depolama işlemleri nedeniyle maliyetin daha yüksek olmasına neden olur. Daha fazla bilgi için bkz . kapasite.
- Bölüm başına verilerin sıkıştırılmış boyutunun 1 GB'tan az olması bekleniyorsa bölümleme ilkesi ayarlamanız önerilmez.
- Bölümleme işlemi, bölümleme işlemi sırasında ve birleştirme işlemi sırasında değiştirilen tüm uzantılar için artık depolama yapıtlarına neden olur. Artık depolama yapıtlarının çoğunun otomatik temizleme işlemi sırasında silinmesi beklenir. özelliğinin değerini artırmak
MaxPartitionCount
artık depolama yapıtlarının sayısını artırır ve temizleme performansını azaltabilir. - Gerçekleştirilmiş görünümde bölümleme ilkesi uygulamadan önce gerçekleştirilmiş görünüm bölümleme ilkesine yönelik önerileri gözden geçirin.
Bölüm anahtarları
Aşağıdaki bölüm anahtarı türleri desteklenir.
Tip | Sütun Türü | Bölüm özellikleri | Bölüm değeri |
---|---|---|---|
Karma | string veya guid |
Function , MaxPartitionCount , Seed , PartitionAssignmentMode |
Function (ColumnName , MaxPartitionCount , Seed ) |
Tekdüzen aralık | datetime |
RangeSize , Reference , OverrideCreationTime |
bin_at (ColumnName , RangeSize , Reference ) |
Karma bölüm anahtarı
İlke bir karma bölüm anahtarı içeriyorsa, aynı bölüme ait tüm homojen uzantılar aynı veri düğümüne atanır.
Not
Veri bölümleme işlemi önemli işlem yükü ekler. Bir tabloya yalnızca aşağıdaki koşullar altında karma bölüm anahtarı uygulamanızı öneririz:
- Sorguların çoğu eşitlik filtreleri kullanıyorsa (
==
,in()
). - Sorguların çoğunluğu, türündeki
string
veyaguid
büyük boyutlu (kardinalitesi 10M veya üzeri) belirli bir sütunda toplanır/birleşir, örneğin ,device_ID
veyauser_ID
. - Bölümlenmiş tabloların kullanım deseni, izleme veya pano uygulamaları gibi yüksek eşzamanlılık sorgusu yükündedir.
- Verileri bölümlendirmek için bir hash-modulo işlevi kullanılır.
- Homojen (bölümlenmiş) uzantılardaki veriler karma bölüm anahtarı tarafından sıralanır.
- Tabloda tanımlanmışsa, karma bölüm anahtarını satır sırası ilkesine eklemeniz gerekmez.
- Karıştırma stratejisini kullanan ve
shuffle key
içindesummarize
join
kullanılan veyamake-series
tablonun karma bölüm anahtarı olan sorguların, düğümler arasında taşımak için gereken veri miktarı azaldığından daha iyi performans göstermeleri beklenir.
Bölüm özellikleri
Özellik | Açıklama | Desteklenen değerler | Önerilen değer |
---|---|---|---|
Function |
Kullanılacak karma modulo işlevinin adı. | XxHash64 |
|
MaxPartitionCount |
Zaman aralığı başına oluşturulacak bölüm sayısı üst sınırı (karma modulo işlevi için modül bağımsız değişkeni). | aralığında (1,2048] . |
Daha yüksek değerler, veri bölümleme işleminde daha fazla ek yüke ve her zaman aralığı için daha fazla sayıda uzantıya yol açar. Önerilen değerdir 128 . Daha yüksek değerler veri alımından sonra bölümleme yükünü ve meta verilerin boyutunu önemli ölçüde artırır ve bu nedenle önerilmez. |
Seed |
Karma değeri rastgele hale getirme için kullanın. | Pozitif bir tamsayı. | 1 , aynı zamanda varsayılan değerdir. |
PartitionAssignmentMode |
Düğümlere bölüm atamak için kullanılan mod. | ByPartition : Aynı bölüme ait tüm homojen (bölümlenmiş) uzantılar aynı düğüme atanır. Uniform : Bir uzantının bölüm değerleri göz ardı edilir. Uzantılar düğümlere tekdüzen atanır. |
Sorgular karma bölüm anahtarına katılmıyor veya toplamıyorsa kullanın Uniform . Aksi takdirde kullanın ByPartition . |
Karma bölüm anahtarı örneği
adlı tenant_id
-typed sütun üzerinde karma string
bölüm anahtarı.
Karma işlevini, MaxPartitionCount
önerilen değere ve varsayılan 1
Seed
değerine 128
ayarlanmış olarak kullanırXxHash64
.
{
"ColumnName": "tenant_id",
"Kind": "Hash",
"Properties": {
"Function": "XxHash64",
"MaxPartitionCount": 128,
"Seed": 1,
"PartitionAssignmentMode": "Uniform"
}
}
Tekdüzen aralık tarih saat bölüm anahtarı
Not
Tabloya datetime
alınan verilerin bu sütuna göre sıralanması pek mümkün olmadığında, tablodaki bir -typed sütununa yalnızca tekdüzen aralık tarih saat bölüm anahtarı uygulayın.
Bu gibi durumlarda, her uzantının sınırlı bir zaman aralığındaki kayıtları içermesi için verileri kapsamlar arasında yeniden düzenleyebilirsiniz. Bu işlem, sütundaki filtrelerin datetime
sorgu zamanında daha etkili olmasına neden olur.
Kullanılan bölüm işlevi bin_at() şeklindedir ve özelleştirilebilir değildir.
Bölüm özellikleri
Özellik | Açıklama | Önerilen değer |
---|---|---|
RangeSize |
timespan Her datetime bölümünün boyutunu gösteren skaler sabit. |
Değeriyle 1.00:00:00 başlayın (bir gün). Tabloda birleştirilemeyecek çok sayıda küçük uzantıya neden olabileceğinden daha kısa bir değer ayarlamayın. |
Reference |
datetime Hangi tarih saat bölümlerinin hizalandığına göre sabit bir zaman noktasını gösteren skaler sabit. |
ile 1970-01-01 00:00:00 başlayın. datetime bölüm anahtarının değerlerine sahip null olduğu kayıtlar varsa, bölüm değeri değerine Reference ayarlanır. |
OverrideCreationTime |
bool Sonuç kapsamının en düşük ve en fazla oluşturma sürelerinin bölüm anahtarındaki değerlerin aralığı tarafından geçersiz kılınıp kılınmayacağını belirten bir. |
varsayılan değeridir false . true Verilerin varış zamanı sırasına göre alınmazsa olarak ayarlayın. Örneğin, tek bir kaynak dosya uzak tarih saat değerleri içerebilir ve/veya alma zamanı yerine tarih saat değerlerine göre bekletmeyi veya önbelleğe almayı zorunlu kılmak isteyebilirsiniz.OverrideCreationTime olarak ayarlandığındatrue , birleştirme işleminde kapsamlar kaçırılabilir. Oluşturma süreleri tablonun Kapsam birleştirme ilkesinin Lookback süresinden daha eskiyse kapsamlar atlanır. Uzantıların bulunabilir olduğundan emin olmak için özelliğini olarak HotCache ayarlayınLookback . |
Tekdüzen aralık tarih saat bölümü örneği
Kod parçacığı, adlı timestamp
yazılan bir sütun üzerinde tekdüzen bir datetime
tarih saat aralığı bölüm anahtarı gösterir.
Her bölüm için boyutuyla 7d
başvuru noktası olarak kullanır datetime(2021-01-01)
ve kapsamların oluşturma sürelerini geçersiz kılmaz.
{
"ColumnName": "timestamp",
"Kind": "UniformRange",
"Properties": {
"Reference": "2021-01-01T00:00:00",
"RangeSize": "7.00:00:00",
"OverrideCreationTime": false
}
}
İlke nesnesi
Varsayılan olarak, bir tablonun veri bölümleme ilkesidir null
. Bu durumda tablodaki veriler alındıktan sonra yeniden bölümlenmez.
Veri bölümleme ilkesi aşağıdaki ana özelliklere sahiptir:
PartitionKeys:
- Tablodaki verilerin nasıl bölümlendiğini tanımlayan bölüm anahtarları koleksiyonu.
- Bir tabloda aşağıdaki seçeneklerden biriyle en fazla
2
bölüm anahtarları bulunabilir:- Bir karma bölüm anahtarı.
- Tekdüzen aralık tarih saat bölüm anahtarı.
- Bir karma bölüm anahtarı ve bir tekdüzen aralık tarih saat bölüm anahtarı.
- Her bölüm anahtarı aşağıdaki özelliklere sahiptir:
ColumnName
:string
- Verilerin bölümlendirileceği sütunun adı.Kind
:string
- Uygulanacak veri bölümleme türü (Hash
veyaUniformRange
).Properties
:property bag
- Bölümlemenin yapıldığı parametrelere göre tanımlar.
EffectiveDateTime:
- İlkenin geçerli olduğu UTC tarih saati.
- Bu özellik isteğe bağlıdır. Belirtilmezse, ilke uygulandıktan sonra alınan veriler için ilke geçerli olur.
Dikkat
- Geçmiş ve zaten alınmış verileri bölümlediğiniz bir tarih saat değeri ayarlayabilirsiniz. Ancak, bu uygulama bölümleme işleminde kullanılan kaynakları önemli ölçüde artırabilir.
- Çoğu durumda, yalnızca yeni alınan verilerin bölümlenmesi ve büyük miktarlarda geçmiş verilerin bölümlenmesinden kaçınmanız önerilir.
- Geçmiş verileri bölümlemeyi seçerseniz, ilkeyi her değiştirdiğinizde birkaç güne kadar olan adımlarda EffectiveDateTime değerini öncekine
datetime
ayarlayarak bunu aşamalı olarak yapmayı göz önünde bulundurun.
Veri bölümleme örneği
İki bölüm anahtarıyla veri bölümleme ilkesi nesnesi.
- adlı
tenant_id
-typed sütun üzerinde karmastring
bölüm anahtarı.- Karma işlevini,
MaxPartitionCount
önerilen değere ve varsayılan1
Seed
değerine128
ayarlanmış olarak kullanırXxHash64
.
- Karma işlevini,
- adlı
timestamp
bir tür sütunu üzerinde tekdüzen birdatetime
tarih saat aralığı bölüm anahtarı.- Her bölüm için boyutuyla
7d
başvuru noktası olarak kullanırdatetime(2021-01-01)
.
- Her bölüm için boyutuyla
{
"PartitionKeys": [
{
"ColumnName": "tenant_id",
"Kind": "Hash",
"Properties": {
"Function": "XxHash64",
"MaxPartitionCount": 128,
"Seed": 1,
"PartitionAssignmentMode": "Uniform"
}
},
{
"ColumnName": "timestamp",
"Kind": "UniformRange",
"Properties": {
"Reference": "2021-01-01T00:00:00",
"RangeSize": "7.00:00:00",
"OverrideCreationTime": false
}
}
]
}
Ek özellikler
Aşağıdaki özellikler ilkenin bir parçası olarak tanımlanabilir. Bu özellikler isteğe bağlıdır ve bunları değiştirmemenizi öneririz.
Özellik | Açıklama | Önerilen değer | Default value |
---|---|---|---|
MinRowCountPerOperation | Tek bir veri bölümleme işleminin kaynak kapsamlarının satır sayısının toplamı için en düşük hedef. | 0 |
|
MaxRowCountPerOperation | Tek bir veri bölümleme işleminin kaynak kapsamlarının satır sayısının toplamı için maksimum hedef. | Bölümleme işlemlerinin işlem başına büyük miktarda bellek veya CPU tükettiği görürseniz 5M'den düşük bir değer ayarlayın. | 0 varsayılan hedefi 5.000.000 kayıttır. |
MaxOriginalSizePerOperation | Tek bir veri bölümleme işleminin kaynak uzantılarının özgün boyutunun (bayt cinsinden) toplamı için maksimum hedef. | Bölümleme işlemleri işlem başına büyük miktarda bellek veya CPU kullanıyorsa, 5 GB'tan düşük bir değer ayarlayın. | 0 varsayılan hedefi 5.368.709.120 bayttır (5 GB). |
Veri bölümleme işlemi
- Veri bölümleme, alım sonrası arka plan işlemi olarak çalışır.
- Sürekli olarak içine alınan bir tablonun her zaman bölümlenemeyen bir veri "kuyruğuna" sahip olması beklenir (nonhomogeneous extents).
- Veri bölümleme, ilkedeki özelliğin değerinden
EffectiveDateTime
bağımsız olarak yalnızca sık erişimli kapsamlarda çalışır.- Soğuk kapsamları bölümleme gerekiyorsa, önbelleğe alma ilkesini geçici olarak ayarlamanız gerekir.
.show database extents partitioning statistics komutunu ve bölümleme ölçümlerini kullanarak veritabanında tanımlı ilkelere sahip tabloların bölümleme durumunu izleyebilirsiniz.
Bölümleme kapasitesi
Veri bölümleme işlemi, daha fazla kapsam oluşturulmasına neden olur. Kapsam birleştirme kapasitesi kademeli olarak artabilir, böylece kapsamları birleştirme işlemi devam edebilir.
Yüksek bir alım aktarım hızı veya bölümleme ilkesi tanımlanmış yeterince fazla sayıda tablo varsa, kapsamlar bölümleme kapsamının devam edebilmesi için kapsamlar bölümleme kapasitesi kademeli olarak artabilir.
::: takma ad aralığı = "azure-data-explorer"
- Çok fazla kaynak kullanmaktan kaçınmak için bu dinamik artışlar sınırlanır. Tamamen kullanılıyorlarsa bunları kademeli ve doğrusal olarak üst sınırın ötesine artırmanız gerekebilir.
- Kapasitelerin artırılması küme kaynaklarının kullanımında önemli bir artışa neden oluyorsa, kümenin ölçeğini el ile veya otomatik ölçeklendirmeyi etkinleştirerek genişletebilirsiniz/. ::: moniker-end
Sınırlamalar
- 5.000.000'den fazla kapsamı olan bir veritabanındaki verileri bölümleme girişimleri kısıtlanır.
- Bu gibi durumlarda,
EffectiveDateTime
yapılandırmanızı ve ilkelerinizi yeniden değerlendirebilmeniz için veritabanındaki tabloların bölümleme ilkelerinin özelliği otomatik olarak birkaç saat geciktirilir.
- Bu gibi durumlarda,
Bölümlenmiş sütunlarda aykırı değerler
- Aşağıdaki durumlar düğümler arasında dengesiz veri dağıtımına katkıda bulunabilir ve sorgu performansını düşürebilir:
- Karma bölüm anahtarı diğerlerinden çok daha yaygın değerler içeriyorsa( örneğin, boş bir dize veya genel bir değer (veya
N/A
gibinull
). - Değerler, veri kümesinde daha yaygın olan bir varlığı (örneğin
tenant_id
) temsil eder.
- Karma bölüm anahtarı diğerlerinden çok daha yaygın değerler içeriyorsa( örneğin, boş bir dize veya genel bir değer (veya
- Tekdüzen aralık tarih saat bölüm anahtarı, sütundaki değerlerin çoğundan "uzak" olan değerlerin yeterince büyük bir yüzdesine sahipse, veri bölümleme işleminin yükü artar ve izlenmesi gereken çok küçük boyutlara yol açabilir. Böyle bir duruma örnek olarak, uzak geçmişten veya gelecekten gelen tarih saat değerleri yer alır.
Bu iki durumda da verileri "düzeltin" veya veri bölümleme ek yükünü azaltmak için veri alımından önce veya veri alımı sırasındaki ilgisiz kayıtları filtreleyin. Örneğin, bir güncelleştirme ilkesi kullanın.