Partitioning ilkesi

Şunlar için geçerlidir: ✅Microsoft FabricAzure 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 guidbir sütuna filtre uyguladığı veya veya gibi TenantId MetricIdbir ölçüm tablosu.
    • Orta kardinalite en az 10.000 ayrı değerdir.
    • Karma bölüm anahtarını veya guid sütunu olarak string ayarlayın ve özelliğini olarak uniformayarlayınPartitionAssignmentMode.
  • Yüksek kardinalite string veya sütunda sık sık toplamalar veya guid 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 ByPartitionayarlayı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 trueayarlayınOverrideCreationTime.

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 veya guid büyük boyutlu (kardinalitesi 10M veya üzeri) belirli bir sütunda toplanır/birleşir, örneğin , device_IDveya user_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.
  • Karıştırma stratejisini kullanan ve shuffle key içinde summarize joinkullanılan veya make-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 stringbölüm anahtarı. Karma işlevini, MaxPartitionCount önerilen değere ve varsayılan 1Seed değerine 128ayarlanmış 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 datetimealı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:00baş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 Referenceayarlanı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 Lookbacksüresinden daha eskiyse kapsamlar atlanır. Uzantıların bulunabilir olduğundan emin olmak için özelliğini olarak HotCacheayarlayınLookback.

Tekdüzen aralık tarih saat bölümü örneği

Kod parçacığı, adlı timestampyazı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:

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.

  1. adlı tenant_id-typed sütun üzerinde karma stringbölüm anahtarı.
    • Karma işlevini, MaxPartitionCount önerilen değere ve varsayılan 1Seed değerine 128ayarlanmış olarak kullanırXxHash64.
  2. adlı timestampbir tür sütunu üzerinde tekdüzen bir datetime tarih saat aralığı bölüm anahtarı.
    • Her bölüm için boyutuyla 7d başvuru noktası olarak kullanırdatetime(2021-01-01).
{
  "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. 0varsayı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. 0varsayı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.

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

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.

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/Agibinull).
    • Değerler, veri kümesinde daha yaygın olan bir varlığı (örneğin tenant_id) temsil eder.
  • 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.