Bagikan melalui


operator partisi

Operator partisi mempartisi rekaman tabel inputnya ke dalam beberapa subtable sesuai dengan nilai dalam kolom kunci. Operator menjalankan subkueri pada setiap subtabel, dan menghasilkan satu tabel output yang merupakan persatuan hasil semua subkueri.

Operator ini berguna saat Anda perlu melakukan subkueri hanya pada subset baris yang termasuk dalam kunci partisi yang sama, dan tidak mengkueri seluruh himpunan data. Subkueri ini dapat mencakup fungsi agregat, fungsi jendela, N teratas, dan lainnya.

Operator partisi mendukung beberapa strategi operasi kueri bertumpuk:

  • Native - gunakan dengan sumber data implisit dengan ribuan nilai partisi kunci.
  • Shuffle - gunakan dengan sumber implisit dengan jutaan nilai partisi kunci.
  • Legacy - gunakan dengan sumber implisit atau eksplisit untuk 64 atau kurang nilai partisi kunci.

Sintaks

T partition | [ hint.strategy=Strategi ] [ Petunjuk ] by Transformasi KolomSubQuery ( )

T partition | [ hint.strategy=legacy ] [ Petunjuk ] by Column { SubQueryWithSource }

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
T string ✔️ Sumber tabular input.
Strategi string Nilai legacy, shuffle, atau native. Petunjuk ini mendefinisikan strategi eksekusi operator partisi.

Jika tidak ada strategi yang ditentukan, legacy strategi digunakan. Untuk informasi selengkapnya, lihat Strategi.
Kolom string ✔️ Nama kolom di T yang nilainya menentukan cara mempartisi sumber tabular input.
TransformationSubQuery string ✔️ Ekspresi transformasi tabular. Sumbernya secara implisit subtable yang dihasilkan dengan mempartisi rekaman T. Setiap subtable bersifat homogen pada nilai Kolom.

Ekspresi hanya boleh memberikan satu hasil tabular dan tidak boleh memiliki jenis pernyataan lain, seperti let pernyataan.
SubQueryWithSource string ✔️ Ekspresi tabular yang menyertakan sumber tabularnya sendiri, seperti referensi tabel. Sintaks ini hanya didukung dengan strategi warisan. Subkueri hanya dapat mereferensikan kolom kunci, Kolom, dari T. Untuk mereferensikan kolom, gunakan Kolom) sintakstoscalar(.

Ekspresi hanya boleh memberikan satu hasil tabular dan tidak boleh memiliki jenis pernyataan lain, seperti let pernyataan.
Petunjuk string Nol atau lebih parameter yang dipisahkan spasi dalam bentuk: Nilai HintName = yang mengontrol perilaku operator. Lihat petunjuk yang didukung per jenis strategi.

Petunjuk yang didukung

Nama petunjuk Jenis Strategi Deskripsi
hint.shufflekey string mencampuri Kunci partisi yang digunakan untuk menjalankan operator partisi dengan shuffle strategi.
hint.materialized bool warisan Jika diatur ke true, akan terwujud sumber operator partition. Nilai defaultnya adalah false.
hint.concurrency int warisan Menentukan berapa banyak partisi yang akan dijalankan secara paralel. Nilai defaultnya adalah 16.
hint.spread int warisan Menentukan cara mendistribusikan partisi di antara node kluster. Nilai defaultnya adalah 1.

Misalnya, jika ada partisi N dan petunjuk spread diatur ke P, maka partisi N akan diproses oleh P node kluster yang berbeda secara paralel/berurutan tergantung pada petunjuk konkurensi.

Mengembalikan

Operator mengembalikan penyatuan hasil kueri bertumpuk individu.

Strategi

Operator partisi mendukung beberapa strategi operasi subkueri: asli, acak, dan warisan.

Catatan

Perbedaan antara native strategi dan shuffle memungkinkan pemanggil untuk menunjukkan kardinalitas dan strategi eksekusi subkueri. Pilihan ini dapat memengaruhi berapa lama subkueri selesai tetapi tidak mengubah hasil akhir.

Strategi asli

Strategi ini harus diterapkan ketika jumlah nilai berbeda dari kunci partisi tidak besar, kira-kira dalam ribuan.

Subkueri harus berupa transformasi tabular yang tidak menentukan sumber tabular. Sumbernya implisit dan ditetapkan sesuai dengan partisi subtabel. Hanya operator tertentu yang didukung yang dapat digunakan dalam subkueri. Tidak terdapat batasan jumlah partisi.

Untuk menggunakan strategi ini, tentukan hint.strategy=native.

Strategi acak

Strategi ini harus diterapkan ketika jumlah nilai berbeda dari kunci partisi besar, dalam jutaan.

Subkueri harus berupa transformasi tabular yang tidak menentukan sumber tabular. Sumbernya implisit dan ditetapkan sesuai dengan partisi subtabel. Hanya operator tertentu yang didukung yang dapat digunakan dalam subkueri. Tidak terdapat batasan jumlah partisi.

Untuk menggunakan strategi ini, tentukan hint.strategy=shuffle. Untuk informasi selengkapnya tentang strategi dan performa acak, lihat kueri acak.

Operator yang didukung untuk strategi asli dan acak

Daftar operator berikut dapat digunakan dalam subkueri dengan strategi asli atau acak:

Catatan

  • Operator yang mereferensikan sumber tabel selain partisi subtable tidak kompatibel dengan native strategi dan shuffle . Misalnya, join, union, externaldata, dan evaluasi (plugin). Untuk skenario seperti itu, gunakan strategi warisan.
  • Operator fork tidak didukung untuk jenis strategi apa pun, karena subkueri harus mengembalikan satu hasil tabular.

Strategi lama

Untuk alasan historis, legacy strateginya adalah strategi default. Namun, kami sarankan untuk mendukung strategi asli atau acak , legacy karena pendekatannya terbatas pada 64 partisi dan kurang efisien.

Dalam beberapa skenario, legacy strategi mungkin diperlukan karena dukungannya untuk menyertakan sumber tabular dalam subkueri. Dalam kasus seperti itu, subkueri hanya dapat mereferensikan kolom kunci, Kolom, dari sumber tabular input, T. Untuk mereferensikan kolom, gunakan Kolom) sintakstoscalar(.

Jika subkueri adalah transformasi tabular tanpa sumber tabular, sumbernya implisit dan didasarkan pada partisi subtable.

Untuk menggunakan strategi ini, tentukan atau hilangkan hint.strategy=legacy indikasi strategi lainnya.

Catatan

Kesalahan akan terjadi jika kolom partisi, Kolom, berisi lebih dari 64 nilai yang berbeda.

Contoh

Menemukan nilai teratas

Dalam beberapa kasus, lebih berkinerja dan lebih mudah untuk menulis kueri menggunakan partition operator daripada menggunakan top-nested operator. Kueri berikut menjalankan penghitungan subkueri summarize dan top untuk masing-masing State dimulai dengan W: "WYOMING", "WASHINGTON", "WEST VIRGINIA", dan "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 
    ) 

Hasil

EventType Provinsi Acara Cedera
Hujan es WYOMING 108 0
Angin Kencang WYOMING 81 5
Badai Musim Dingin WYOMING 72 0
Salju Tebal WASHINGTON 82 0
Angin Kencang WASHINGTON 58 13
Wildfire WASHINGTON 29 0
Angin Badai Petir WEST VIRGINIA 180 1
Hujan es WEST VIRGINIA 103 0
Cuaca Musim Dingin WEST VIRGINIA 88 0
Angin Badai Petir WISCONSIN 416 1
Badai Musim Dingin WISCONSIN 310 0
Hujan es WISCONSIN 303 1

Strategi asli

Kueri berikut mengembalikan 2 EventType nilai teratas menurut TotalInjuries untuk masing-masing State yang dimulai dengan 'W':

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

Hasil

EventType TotalInjueries
Tornado 4
Hujan es 1
Angin Badai Petir 1
Panas Berlebihan 0
Angin Kencang 13
Lightning 5
Angin Kencang 5
Tanah Longsor 3

Strategi acak

Kueri berikut mengembalikan 3 DamagedProperty nilai teratas foreach EpisodeId dan kolom EpisodeId dan State.

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

Hasil

Hitung
22345

Strategi lama dengan sumber eksplisit

Kueri berikut menjalankan dua subkueri:

  • Ketika x == 1, kueri mengembalikan semua baris dari StormEvents yang memiliki InjuriesIndirect == 1.
  • Ketika x == 2, kueri mengembalikan semua baris dari StormEvents yang memiliki InjuriesIndirect == 2.

Hasil akhir adalah persatuan dari kedua subkueri ini.

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

Hasil

Hitung
113

Referensi partisi

Contoh berikut menunjukkan cara menggunakan operator sebagai untuk memberikan "nama" ke setiap partisi data dan kemudian menggunakan kembali nama itu di dalam kueri bertumpuk. Pendekatan ini hanya relevan dengan legacy strategi.

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