Share via


partition işleci

Bölüm işleci, giriş tablosunun kayıtlarını bir anahtar sütunundaki değerlere göre birden çok alt tabloya böler. işleci her alt tabloda bir alt sorgu çalıştırır ve tüm alt sorguların sonuçlarının birleşimi olan tek bir çıkış tablosu oluşturur.

Bu işleç, yalnızca aynı bölüm anahtarına ait satırların bir alt kümesinde alt sorgu gerçekleştirmeniz gerektiğinde ve veri kümesinin tamamını sorgulamadığınızda kullanışlıdır. Bu alt sorgular toplama işlevlerini, pencere işlevlerini, ilk N'yi ve diğerlerini içerebilir.

Bölüm işleci, alt sorgu işleminin çeşitli stratejilerini destekler:

  • Yerel - binlerce anahtar bölüm değeri içeren örtük bir veri kaynağıyla kullanın.
  • Shuffle - milyonlarca anahtar bölüm değerine sahip örtük bir kaynakla kullanın.
  • Eski - 64 veya daha az anahtar bölüm değeri için örtük veya açık bir kaynakla kullanın.

Syntax

T|partition [ hint.strategy=Strateji ] [ İpuçları ] bySütun(DönüşümüUbQuery)

T|partition [ hint.strategy=legacy ] [ İpuçları ] bySubQueryWithSourceSütunu{}

Söz dizimi kuralları hakkında daha fazla bilgi edinin.

Parametreler

Ad Tür Gerekli Açıklama
T string ✔️ Giriş tablosal kaynağı.
Strateji string , shuffleveya nativedeğerilegacy. Bu ipucu bölüm işlecinin yürütme stratejisini tanımlar.

Hiçbir strateji belirtilmezse, legacy strateji kullanılır. Daha fazla bilgi için bkz . Stratejiler.
Sütun string ✔️ T'de değerleri giriş tablosal kaynağının nasıl bölümleneceğini belirleyen bir sütunun adı.
TransformationSubQuery string ✔️ Tablosal dönüştürme ifadesi. Kaynak örtük olarak T kayıtlarını bölümleyerek üretilen alt tablodur. Her alt tablo , Sütun değeri üzerinde homojendir.

İfade yalnızca bir tablo sonucu sağlamalı ve deyimler gibi let başka deyim türlerine sahip olmamalıdır.
SubQueryWithSource string ✔️ Tablo başvurusu gibi kendi tablosal kaynağını içeren tablosal ifade. Bu söz dizimi yalnızca eski stratejide desteklenir. Alt sorgu yalnızca T'denSütun anahtar sütununa başvurabilir. Sütuna başvurmak için Sütun) söz dizimini toscalar( kullanın.

İfade yalnızca bir tablo sonucu sağlamalı ve deyimler gibi let başka deyim türlerine sahip olmamalıdır.
İpuçları string Şu biçimde sıfır veya daha fazla boşlukla ayrılmış parametre: işlecin davranışını denetleen HintName=Değeri . Strateji türü başına desteklenen ipuçlarına bakın.

Desteklenen ipuçları

İpucu adı Tür Strateji Description
hint.shufflekey string shuffle Bölüm işlecini stratejiyle shuffle çalıştırmak için kullanılan bölüm anahtarı.
hint.materialized bool Eski olarak ayarlanırsa trueişlecin kaynağını partition oluşturur. false varsayılan değerdir.
hint.concurrency int Eski Paralel olarak çalıştırılacak bölüm sayısını belirler. 16 varsayılan değerdir.
hint.spread int Eski Bölümlerin küme düğümleri arasında nasıl dağıtileceğini belirler. 1 varsayılan değerdir.

Örneğin, N bölümleri varsa ve yayılma ipucu P olarak ayarlanırsa , N bölümleri eşzamanlılık ipucuna bağlı olarak P farklı küme düğümleri tarafından paralel/sıralı olarak eşit olarak işlenir.

Döndürülenler

işleci, tek tek alt sorguların sonuçlarının birleşimini döndürür.

Stratejiler

Bölüm işleci alt sorgu işleminin çeşitli stratejilerini destekler: yerel, karıştırma ve eski.

Not

ve shuffle stratejileri arasındaki native ayrım, çağıranın alt sorgunun kardinalitesini ve yürütme stratejisini belirtmesini sağlar. Bu seçim, alt sorgunun tamamlanmasının ne kadar sürdüğünü etkileyebilir, ancak bitiş sonucunu değiştirmez.

Yerel strateji

Bu strateji, bölüm anahtarının farklı değerlerinin sayısı kabaca binler içinde büyük olmadığında uygulanmalıdır.

Alt sorgu, tablosal kaynak belirtmeyen bir tablosal dönüşüm olmalıdır. Kaynak örtük ve alt tablo bölümlerine göre atanır. Alt sorguda yalnızca desteklenen bazı işleçler kullanılabilir. Bölüm sayısıyla ilgili bir kısıtlama yoktur.

Bu stratejiyi kullanmak için belirtin hint.strategy=native.

Karıştırma stratejisi

Bu strateji, bölüm anahtarının ayrı değerlerinin sayısı milyon cinsinden büyük olduğunda uygulanmalıdır.

Alt sorgu, tablosal kaynak belirtmeyen bir tablosal dönüşüm olmalıdır. Kaynak örtük ve alt tablo bölümlerine göre atanır. Alt sorguda yalnızca desteklenen bazı işleçler kullanılabilir. Bölüm sayısıyla ilgili bir kısıtlama yoktur.

Bu stratejiyi kullanmak için belirtin hint.strategy=shuffle. Karıştırma stratejisi ve performansı hakkında daha fazla bilgi için bkz. sorguyu karıştırma.

Yerel ve karıştırma stratejileri için desteklenen işleçler

Aşağıdaki işleç listesi yerel veya karıştırma stratejileriyle alt sorgularda kullanılabilir:

Not

  • Alt tablo bölümleri dışındaki bir tablo kaynağına başvuran işleçler ve shuffle stratejileriyle native uyumlu değildir. Örneğin , join, union, externaldata ve evaluate (eklentiler). Bu tür senaryolar için eski stratejiye başvur.
  • Alt sorgunun tek bir tablo sonucu döndürmesi gerektiğinden çatal işleci hiçbir strateji türü için desteklenmez.

Eski strateji

Geçmiş nedenlerden dolayı, legacy strateji varsayılan stratejidir. Ancak, yaklaşım 64 bölümle sınırlı olduğundan ve daha az verimli olduğundan yerellegacy veya karıştırma stratejilerini desteklemenizi öneririz.

Bazı senaryolarda, alt sorguya legacy tablosal bir kaynak ekleme desteği nedeniyle strateji gerekli olabilir. Böyle durumlarda, alt sorgu yalnızca giriş tablosal kaynağı olan T'denSütun anahtar sütununa başvurabilir. Sütuna başvurmak için Sütun) söz dizimini toscalar( kullanın.

Alt sorgu, tablosal kaynağı olmayan bir tablosal dönüşümse, kaynak örtük olur ve alt tablo bölümlerini temel alır.

Bu stratejiyi kullanmak için diğer strateji göstergelerini belirtin hint.strategy=legacy veya atayın.

Not

Bölüm sütunu olan Sütun 64'ten fazla ayrı değer içeriyorsa hata oluşur.

Örnekler

En yüksek değerleri bulma

Bazı durumlarda, işlecini kullanmaktan daha performanslı ve işlecini partition kullanarak sorgu yazmak daha top-nested kolaydır. Aşağıdaki sorgu, ve ile başlayan Wher State biri için bir alt sorgu summarizetop çalıştırır: "WYOMING", "WASHINGTON", "WEST VIRGINIA" ve "WISCONSIN".

StormEvents
| where State startswith 'W'
| partition hint.strategy=native by State 
    (
    summarize Events=count(), Injuries=sum(InjuriesDirect) by EventType, State
    | top 3 by Events 
    ) 

Çıkış

Olay türü Durum Ekinlikler Yaralanma
Dolu WYOMİNG 108 0
Yüksek Rüzgar WYOMİNG 81 5
Kış Fırtınası WYOMİNG 72 0
Yoğun Kar WASHİNGTON 82 0
Yüksek Rüzgar WASHİNGTON 58 13
Wildfire WASHİNGTON 29 0
Fırtına Rüzgarı WEST VIRGINIA 180 1
Dolu WEST VIRGINIA 103 0
Kış Hava Durumu WEST VIRGINIA 88 0
Fırtına Rüzgarı WİSCONSİN 416 1
Kış Fırtınası WİSCONSİN 310 0
Dolu WİSCONSİN 303 1

Yerel strateji

Aşağıdaki sorgu, 'W' ile başlayan her State bir sorgu için tarafından ilk 2 EventType değeri TotalInjuries döndürür:

StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
    (
    summarize TotalInjueries = sum(InjuriesDirect) by EventType
    | top 2 by TotalInjueries
    )

Çıkış

Olay türü TotalInjueries
Kasırga 4
Dolu 1
Fırtına Rüzgarı 1
Aşırı Isı 0
Yüksek Rüzgar 13
Lightning 5
Yüksek Rüzgar 5
Çığ 3

Karıştırma stratejisi

Aşağıdaki sorgu foreach EpisodeId ve ile sütunlarının StateEpisodeId ilk 3 DamagedProperty değerini döndürür.

StormEvents
| partition hint.strategy=shuffle by EpisodeId
    (
    top 3 by DamageProperty
    | project EpisodeId, State, DamageProperty
    )
| count

Çıkış

Count
22345

Açık kaynak ile eski strateji

Aşağıdaki sorgu iki alt sorgu çalıştırır:

  • olduğundax == 1, sorgu öğesini içeren InjuriesIndirect == 1tüm satırlarını StormEvents döndürür.
  • olduğundax == 2, sorgu öğesini içeren InjuriesIndirect == 2tüm satırlarını StormEvents döndürür.

Nihai sonuç, bu iki alt sorgunun birleşimidir.

range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count 

Çıkış

Count
113

Bölüm başvurusu

Aşağıdaki örnekte, her veri bölümüne bir "ad" vermek ve ardından bu adı alt sorgu içinde yeniden kullanmak için as işlecinin nasıl kullanılacağı gösterilmektedir. Bu yaklaşım yalnızca stratejiyle legacy ilgilidir.

T
| partition by Dim
(
    as Partition
    | extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)